用PHP做后台,处理客户端的WebSocket连接,需要用socket_*函数族,接收消息的函数是socket_recv,它要求提供一个缓冲区变量,和最大字节数,但是在接收消息之前,怎么知道客户端发的消息有多大呢?是不是需要自己制定一种协议,比如,发送的数据不能超过4294967296(4GB),因而每条消息的前十个字符表示消息的长度。另外,就像HTTP带着Cookie,WebSocket可能也需要每条消息带着会话ID,以便区分用户……这些都是由服务端开发者来指定的吗?是的话,行业里有没有什么约定俗成的标准可以参考?还是完全自己发挥?谢谢!
2 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
你问的问题有点弄混了底层socket函数,不管你是啥应用层协议,它们只管吧字节流收下来,应用层协议是你自己解析的,你收到字节流后,自己做应用层协议解析,websocket有自己的协议(协议头+payload+校验等)一个websocket协议包如果太大,你需要多次接收后拼接处理假设你的缓冲区是1024字节,一个websocket包是1500个字节那么第一次你收到1024发现协议包不能完全解析,就放到缓存里,再取后面的1024字节,凑出1500字节后,发现协议包解析成功了,剩下的就是下一个包的内容
慕的地8271018
TA贡献1796条经验 获得超4个赞
swoole,workerman了解下$data='';while(@socket_recv($my_socket,$res,8192,0)){$data.=$res;}echo$data;
添加回答
举报
0/150
提交
取消