月度归档:2015年12月

WebSocket原理和如何实现持久连接

HTTP协议

HTTP协议是基于TCP协议的应用层协议。HTTP协议的工作模式是request/response模式。在一次通信中,必须首先由client向server发起TCP连接,然后server接受该TCP连接请求,在TCP连接建立之后,首先由client发起HTTP request,然后server再发出HTTP response。

问题:Server不允许发送TCP请求。也就是说明Server没有收到request的情况下,没把发发送response给客户端。

解决方法:

1、多个HTTP请求不断发出。如Ajax轮询,浏览器每隔几秒就问下服务器是否还有新的消息。随之而来的问题占用服务器资源。

2、long poll 跟Ajax轮询差不多的。采取的是阻塞模式。没有收到服务器端的响应,就一直不返回Response给客户端。这点感觉好像个孩子。看到好玩的好吃的话,一定要到手,否则就哭着不走。哈哈… 带来的问题就是需要很高的并发。

WebSocket

WebSocket是Html5新的协议。借用了HTTP的协议来完成一部分握手。实现了浏览器与服务器全双工通信。HTTP协议建立在TCP协议之上的,当进行HTTP通信时候,Client和Server之间已经建立起了一个TCP连接,而任何TCP连接都是可以用来双向通信的,所以我们就可以利用这个现成的TCP连接来实现Client和Server的双向通信。

 

继续阅读

web服务器下nginx如何配置反向代理

Nginx如何配置反向代理呢

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。Nginx作为web服务器的重要功能就是反向代理。

Nginx使用默认自带的proxy_pass指令, 不需要新增额外的模块,就可以实现反向代理。

举个例子:比如在CentOS服务器上安装Splunk。Splunk默认安装完成后的访问地址为:http://IP地址:8000。让其他人访问这个地址很麻烦,而且不容易记住。此时可以使用Nginx反向代理。配置单独的域名直接访问。

继续阅读

PHP应用服务器(Apache/Nginx)设置环境变量

为PHP应用服务器(Apache/Nginx)设置环境变量可以使不同的环境调用不同的配置。

设置Apache环境变量

格式为:SetENV 环境变量的名称  环境变量的值。

例如:SetENV ENV staging,意思设置ENV环境变量的值为staging。

<VirtualHost *:80>
 DocumentRoot 项目目录
 ServerName 域名
 DirectoryIndex index.php

//设置Apache环境变量
 SetENV ENV staging
</VirtualHost>

继续阅读

PHP-FPM理解,基于CGI和Fastcgi

在理解php-fpm之前,先理解下什么叫CGI。CGI是为了保证web server(比如说nginx)传递过来的数据是标准格式。

CGI程序

如果是请求地址为动态文件,比如/index.php,会启动对应的CGI程序(可以理解为PHP的解析器),web server会传递如下数据给PHP的解析器。如:url地址、查询字符串、POST数据(如果是POST请求的话)、HTTP Header等。所以CGI规定需要要传哪些数据,以什么样的格式传递给后方来处理这个请求的协议,再以规定CGI的格式返回处理后的结果,最终退出进程,结果返回到浏览器。

继续阅读

Mac下同一客户端设置多个git帐号

断断续续使用Git一段时间,一直都是基于全局下配置Git帐号的。还没有配置过多个git帐号。今天正好需要使用两个远程地址。百度一下。顺便做一个记录。

一、使用ssh-keygen命令生成一组新的id_rsa_new和id_rsa_new.pub

$ssh-keygen -t rsa -C "newemail"

默认状态下都是 回车键,之后生成id_rsa和id_rsa.pub。如果想生成新的密码,需要如下图操作

a

继续阅读

Linux下bash快捷键

每次操作都要baidu,果断记录下来

Ctrl+a   移至行首
Ctrl+e   移至行尾
Ctrl+k   删除至行尾
Esc+b 左移一个单词
Esc+f 右移一个单词
Ctrl+u 删除目前指令上的所有文字