跳转至

2017 年

数说2017

{% iframe //export.cyub.vip/i?all=%7B%22chart%22%3A%7B%22type%22%3A%22bar%22%7D%2C%22title%22%3A%7B%22text%22%3A%22GitHub%202017%E5%B9%B4%E5%BA%A6%E6%9C%80%E5%8F%97%E6%AC%A2%E8%BF%8E%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80%E6%8E%92%E8%A1%8C%22%7D%2C%22subtitle%22%3A%7B%22text%22%3A%22%E6%95%B0%E6%8D%AE%E6%9D%A5%E6%BA%90%3A%20https%3A%2F%2Foctoverse.github.com%22%7D%2C%22xAxis%22%3A%7B%22categories%22%3A%5B%22JAVASCRIPT%22%2C%22PYTHON%22%2C%22JAVA%22%2C%22RUBY%22%2C%22PHP%22%2C%22C%2B%2B%22%2C%22CSS%22%2C%22C%23%22%2C%22GO%22%2C%22TYPESCRIPT%22%2C%22SHELL%22%2C%22SWIFT%22%2C%22SCALA%22%2C%22OBJECTIVEC%22%5D%2C%22title%22%3A%7B%22text%22%3Anull%7D%7D%2C%22yAxis%22%3A%7B%22title%22%3A%7B%22text%22%3A%22Pull%20Request%E6%AC%A1%E6%95%B0%22%7D%7D%2C%22tooltip%22%3A%7B%22enabled%22%3Atrue%2C%22pointFormatter%22%3A%22__fn__%20()%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20var%20val%20%3D%20this.y%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20if%20(val%2F1000000%20%3E%3D%201)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%20%3D%20val%2F1000000%20%2B%20'M'%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if(val%2F1000%20%3E%3D%201)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%20%3D%20val%2F1000%20%2B%20'K'%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20return%20'%3Cspan%20style%3D%5C%22color%3A%20'%2B%20this.series.color%20%2B%20'%5C%22%3E%5C%5Cu25CF%3C%2Fspan%3EPull%20Request%3A%20%3Cspan%20style%3D%5C%22color%3A%23f69744%5C%22%3E'%2B%20val%20%2B'%3C%2Fspan%3E'%5Cn%7D%22%7D%2C%22plotOptions%22%3A%7B%22bar%22%3A%7B%22dataLabels%22%3A%7B%22enabled%22%3Atrue%2C%22formatter%22%3A%22__fn__%20()%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(this.y%20%2F%201000000%20%3E%3D%201)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20this.y%2F1000000%20%2B%20'M'%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(this.y%20%2F%201000%20%3E%3D%201)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20this.y%2F1000%20%2B%20'K'%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20this.y%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%22%7D%2C%22colorByPoint%22%3Atrue%7D%7D%2C%22credits%22%3A%7B%22enabled%22%3Afalse%7D%2C%22legend%22%3A%7B%22enabled%22%3Afalse%7D%2C%22series%22%3A%5B%7B%22data%22%3A%5B2300000%2C1000000%2C986000%2C870000%2C559000%2C413000%2C335000%2C285000%2C235000%2C207000%2C206000%2C107000%2C99000%2C66000%5D%7D%5D%7D&width=620&height=500 620 500 %}

长连接,RPC,RESTful乱弹

今天学习到很多知识,混混沌沌的大脑有时候就得需要轻敲一下,才能醍醐灌顶。

之前的对技术思考深度不够,涉及到东西浮于表面,蜻蜓点水而过。对于注意到不寻常现象,往往没有分析它的本质,思考现象本身原因就放过了。比如今天学习到RPC和Restful一个区别是RPC支持长连接,这对我之前对RPC的了解停留在客户端调用是无感知,无差别更深入本质了。

长连接

长连接(HTTP persistent connection)指的是在一个连接上可以持续不断的发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需 要双方发检测包以维持此连接。

keep-alive机制出现之前,每次http请求都会打开一个tcp socket连接,请求完成之后就断开这个tcp连接。keep-alive机制,能够保持TCP连接不断开(不发RST包、不四次握手),减少了tcp连接次数,提交了传输速率。但是长时间不释放tcp连接数,也会极大的造成资源浪费。实现成千上万人同时在线的话,也就得保持住同样数量的tcp连接数。keep-alive的timeout时间设置非常重要,能够及时的释放不需要的tcp连接。

23个开发工具加速网站性能

原文地址:23 Development Tools for Boosting Website Performance

When dealing with performance, it’s hard to remember all the tools that might help you out during development. For that purpose, we’ve compiled a list of 23 performance tools for your reference. Some you’ll have heard of, others probably not. Some have been covered in detail in our performance month, others are yet to be covered future articles; but all are very useful and should be part of your arsenal.

使用Robo自动生成Nginx虚拟主机配置

在开发过程中,我们有时候是基于一个框架的脚手架来开发。先clone下来项目,然后配置Nginx或Apache服务器里面的虚拟主机,映射到当前项目。这个虚拟主机的配置可以由程序自动生成。

流程如下:

  1. composer create-project tink/slim-skeleton:dev-master blog // 使用slim-skeleton创建blog项目
  2. cd blog // 切换到blog目录
  3. ngto park // 执行命令,配置虚拟主机。blog.local域名自动配置到当前blog项目。

使用Consul,Bind和Nginx实现服务端服务发现

在微服务架构实践中,一个难点是服务发现。每一个服务采用分布式部署,保证了拓展性和容错性,但带来了一个难点是如何监控这些服务,如何找到这些服务。

服务发现的种类有两种:客户端发现和服务端发现

客服端发现-客户端或者API网关查询注册中心获取服务的位置信息。支持服务注册的软件有EtcdZookeeperConsul

什么是双因素身份认证(2FA)?

英文原文:two-factor authentication (2FA)

Two-factor authentication (2FA), often referred to as two-step verification, is a security process in which the user provides two authentication factors to verify they are who they say they are. 2FA can be contrasted with single-factor authentication (SFA), a security process in which the user provides only one factor -- typically a password.

双因素身份认证(2FA),经常被认为是两步骤认证(two-step verification)。它是一个安全处理措施,用户需要提供2个认证因素来证明他们的身份。2FA可以和单因素认证(single-factor authentication)进行一个对比,单因素认证只需要提供一个认证因素,典例的是密码认证

如何正确选择一个HTTP状态码

HTTP状态码(HTTP Status Code)是3位数字代码,用来表示服务器HTTP响应状态,它由RFC2616 规范定义的。所有状态码第一个数字代表其所属的状态分类。服务端返回响应数据时候,HTTP协议号和状态码作为Response line返回给客户端

在开发过程中,特别是基于RESTful架构,一个语义正确的HTTP状态码,显得十分有必要,它能够帮助客户端接受者能够从状态码快速甄别资源的状态。作为服务提供者,需要在客户端请求和服务的状态下选择一个正确的状态往往不是那么容易的事情。比如客户端访问一个受限的资源,返回401还是403就得细细考虑了。

一个PHPer的sublime插件指南

作为一名PHPer,在开发(ban zhuan)过程中,没有一个犀利的编辑器怎么能行。sublime是我最喜欢的编辑器,具有强大的拓展功能,有许多丰富的插件支撑。

下面是我目前使用的插件:

插件管理

Package Control 强大的Sublime插件管理工具

主题

Boxy 一个十足极客范的Sublime主题,支持多种主题颜色切换

PHP反射API初探

1. 什么是反射

反射在百度百科里面的解释是“反射是一种计算机处理方式。有程序可以访问、检测和修改它本身状态或行为的这种能力。能提供封装程序集、类型的对象”。

PHP提供了对类、函数、方法以及拓展进行反射的能力。通过反射我们可以在动态运行程序时候,获取类的名字,参数,方法、注释等信息以及动态调用对象方法,通过这些可以实现自动生成文档、自动注入依赖,插件管理。

反射的优点: 1. 反射提高了程序的灵活性和扩展性。 2. 降低耦合性,提高自适应能力。 3. 它允许程序创建和控制任何类的对象,无需提前硬编码目标类。