为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
侃侃无极 2019-03-12 18:39:42
用PHP做后台,处理客户端的WebSocket连接,需要用 socket_* 函数族,接收消息的函数是 socket_recv ,它要求提供一个缓冲区变量,和最大字节数,但是在接收消息之前,怎么知道客户端发的消息有多大呢?是不是需要自己制定一种协议,比如,发送的数据不能超过 4294967296 (4GB),因而每条消息的前十个字符表示消息的长度。另外,就像HTTP带着Cookie,WebSocket可能也需要每条消息带着会话ID,以便区分用户……这些都是由服务端开发者来指定的吗?是的话,行业里有没有什么约定俗成的标准可以参考?还是完全自己发挥?谢谢!
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

你问的问题有点弄混了

底层 socket 函数,不管你是啥应用层协议,它们只管吧 字节流 收下来,应用层协议是你自己解析的,你收到字节流后,自己做应用层协议解析,

websocket 有自己的协议(协议头+payload+校验等)
一个 websocket 协议包 如果太大,你需要多次接收后拼接处理

假设你的缓冲区是 1024 字节,一个 websocket 包是 1500 个字节
那么第一次你收到 1024 发现协议包不能完全解析,就放到缓存里,再取后面的 1024 字节,凑出 1500 字节后,发现协议包解析成功了,剩下的就是下一个包的内容


查看完整回答
反对 回复 2019-03-12
?
万千封印

TA贡献1891条经验 获得超3个赞

swoole,workerman了解下

$data = '';while (@socket_recv($my_socket, $res, 8192, 0))
{
    $data .= $res;
}
echo $data;


查看完整回答
反对 回复 2019-03-12
  • 2 回答
  • 0 关注
  • 421 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信