转眼都8102年了,我也不能总是局限于ajax那一小块内容了,是时候开放眼界来迎接一下新的内容。
WebSocket是HTML5一种新的协议,实现了浏览器与服务器全双工通信...相比异步单向请求返回的ajax可谓省了不少的资源..
举颗栗子说。如果我要在网页实现发送给对方或者接受来自对方消息的功能,若利用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
我是拒绝的.
(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..性能真的是丝滑啊~
共0条评论