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

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

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

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

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

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

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

swoole,workerman了解下
$data='';
while(@socket_recv($my_socket,$res,8192,0))
{
$data.=$res;
}
echo$data;
                            
查看完整回答
反对 回复 2019-05-08
  • 2 回答
  • 0 关注
  • 312 浏览
慕课专栏
更多

添加回答

举报

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