websocket

websocket是一种和http类似的应用层协议。

而普通的socket是对tcp协议的封装的API。两者本质上不同,相当于是一个在应用层,一个在传输层。

websocket适合做web上的即时通信,关于weisocket的基本理解:http://www.zhihu.com/question/20215561

简单介绍下:

普通的http请求是:

1、客户端发起请求,告诉服务器,我是http请求,然后建立三次握手,服务器返回数据,然后四次挥手,完成。

 

wb是基于http的,只不过在包头中多了一个参数,告诉服务器我是wb。然后服务器做相应处理。

1、服务器(假设php)开启socket,socket的创建,绑定等等,参考php的socket API。

2、wb的创建,客户端通过js调用wb发起连接(可以用socket.io这个库)。

3、服务器收到连接后,解析buffer中的东西,发现客户端在发过来的http包中新增了一个东西告诉服务器我是wb,

    于是服务器设置wb相关信息(其实是改协议)Sec-WebSocket-Key等信息,然后三次握手完成,并建立了一个socket的通道。

4、服务器就和客户端通过这个socket通道来通信,期间没有http包的来回了,从而实现C/S模式通信。这个抓包可以通过chorme=>f12=>network=>wb=>frame查看

 

当然,上面的只是但进程的,php可以配合pctl_fork创建多进程来实现多进程通信。

 

关于wb的服务器的具体实现:

http://www.cnblogs.com/hustskyking/p/websocket-with-php.html

http://www.king-liu.net/?p=767

相关文章:

http://zengrong.net/post/2199.htm

 

相关的框架或扩展有:

php框架workerman(php实现)

http://www.workerman.net/

php扩展,swoole(c实现)

http://www.swoole.com/

 

posted on 2016-05-10 20:05  allen__  阅读(185)  评论(0编辑  收藏  举报

导航