转眼都8102年了,我也不能总是局限于ajax那一小块内容了,是时候开放眼界来迎接一下新的内容。

WebSocket是HTML5一种新的协议,实现了浏览器与服务器全双工通信...相比异步单向请求返回的ajax可谓省了不少的资源..

jugelizi

举颗栗子说。如果我要在网页实现发送给对方或者接受来自对方消息的功能,若利用ajax,则要么使用轮询、要么使用超耗资源的comet方式.

如果使用轮询,无法实时获取对方发送的信息,因为如果发送请求过多浏览器会拦截行为,要不就会因为循环过多而卡,甚至会被服务端认为是CC类攻击.....

如果采用comet,虽然在某些程度上可以近似达到实时的情况(在ajax请求发出后一直挂起,过一段时间超时返回error并重新make一次request;而如果在中途服务端有信息,则可以立刻返回使得ajax进入success状态。总结来说就是利用客户端和服务端之间的长连接。)。但是尽管如此,如果太多请求发出,服务端也会有太多程序执行“排队”——也就像一个人憋气,每次发出一个请求他都要多憋一会。但是总会有没气的时候,也就是服务器资源会被这些请求所占用...这也是comet技术的一大缺点.(不过我之前在咸鱼里也是用过的...)

Websocket则与以上两种都不同,可以完美实现前后端data的实时交互,很少有浏览器和服务器资源消耗的问题。我也因此想开始了解一下ws这玩意了...

众所周知,些瓶,我,是一个PHP菜鸟。当我第一次看到ws前端代码示例时,我是接受的(内心OS:前端还蛮容易理解的,这玩意我玩定了)。

But,当我看到php后端ws的示例代码时...

socket,socket,socket,socket,还是socket  

我是拒绝的.
TIM图片20180922231454.jpg

(OS:什么?socket?没了解过.什么?!全都是socket?!)

所以到这里大家应该知道为什么标题是"框架"了..像我这样的菜鸟当然没有写这种轮子的功底,只能找现成的框架学习了..左右衡量了一下..我决定学习workerman.

在了解到workerman的第二天,我自己摸索着写了个聊天室出来(特别简陋):
https://o.xbottle.top/ws/

算是workerman初学作吧..个人总结注意事项以下:

1.前端js传递的数据要先用JSON.stringify包装.

2.后端在文件头要use引入Worker类,但是在require的文件中还要重新引用.

3.在设置Timer的时候,一定记得用use作闭包处理(function()use(xxx){})...

4.设置心跳包很重要,不然会被隔开空连接..

5.可以利用Worker创建数组来储存连接(只支持单个进程!):

$ws = new Worker("websocket://0.0.0.0:2333");    
 $ws ->conid=array();    
 $ws ->onMessage = function($connection,$data )
{  
     $ws ->conid['Sobo']=$connection;  
}   
//稍后便可以使用:    
 $ws ->conid['Sobo']->send();  
/*取出连接*/  

6.一定要注意全局变量和区域变量,以及require文件的可用性,一旦报错,会导致worker停止.

7.前端JS在ws.close后无法再在ws上重新开启连接,否则可能会导致莫名其妙的卡顿。

8.ws转wss可以使用nginx这种网站服务器作转发:
https://wenda.workerman.net/question/1485

总结起来就是这些,国庆这几天我还把咸鱼的通信方式调教成了Websocket..性能真的是丝滑啊~