有朋友研究过WebSocket吗?请教一下

用PHP做后台,处理客户端的WebSocket连接,需要用 socket_* 函数族,接收消息的函数是 socket_recv ,它要求提供一个缓冲区变量,和最大字节数,但是在接收消息之前,怎么知道客户端发的消息有多大呢?

是不是需要自己制定一种协议,比如,发送的数据不能超过 4294967296 (4GB),因而每条消息的前十个字符表示消息的长度。另外,就像HTTP带着Cookie,WebSocket可能也需要每条消息带着会话ID,以便区分用户……这些都是由服务端开发者来指定的吗?是的话,行业里有没有什么约定俗成的标准可以参考?还是完全自己发挥?

谢谢!



侃侃无极
浏览 436回答 2
2回答

慕娘9325324

你问的问题有点弄混了底层 socket 函数,不管你是啥应用层协议,它们只管吧 字节流 收下来,应用层协议是你自己解析的,你收到字节流后,自己做应用层协议解析,websocket 有自己的协议(协议头+payload+校验等)一个 websocket 协议包 如果太大,你需要多次接收后拼接处理假设你的缓冲区是 1024 字节,一个 websocket 包是 1500 个字节那么第一次你收到 1024 发现协议包不能完全解析,就放到缓存里,再取后面的 1024 字节,凑出 1500 字节后,发现协议包解析成功了,剩下的就是下一个包的内容

万千封印

swoole,workerman了解下$data = '';while (@socket_recv($my_socket, $res, 8192, 0)) {     $data .= $res; } echo $data;
打开App,查看更多内容
随时随地看视频慕课网APP