心血来潮想弄一下workerman 从composer安装了扩展"workerman/workerman": "^3.5"
在一通瞎鸡儿鼓捣之后卡住了
public function onMessage($connection, $data)
这个方法成功的困扰了我三四天[attach]2309[/attach]
当我点击按钮 发送aaaa的时候
[attach]2313[/attach]
onMessage()方法会随机出现三种结果
结果一 没反应
[attach]2310[/attach]
结果二 正确输出aaaa
[attach]2312[/attach]
结果三 输出乱码
[attach]2314[/attach]
反复尝试了n边之后找到了规律
乱码只会出现在没有反应之后
就相当于掷硬币
第一次
要么没反应 要么获取到aaaa
如果是没反应
则第二三四。。。次要么是乱码 要么是没反应
直到乱码出现
重新掷硬币 规律同上
出现aaaa的概率完全没有规则
有时候可以三五遍 有时候一遍都没有
多次尝试之后开始动脑子
感觉应该是 没反应 应该是接收数据没有结束 在多次点击发送aaaa 之后 把几次的东西结合在了一起 然后 解压失败
然后在扩展上有一阵瞎鸡儿鼓捣
发现
源码里面有这两个东西 大概意思应该是
缓存区
$this->_recvBuffer
当前包应该有的长度
$this->_currentPackageLength
里面会判断
如果缓存区小于当前包应该有的长度 则等待再次传入数据
[attach]2315[/attach]
直到缓存区等于
[attach]2316[/attach]
或者超过
[attach]2317[/attach]
当前包应该有的长度 然后触发
[attach]2318[/attach]
就是这个方法public function onMessage($connection, $data)
我遇到的没反应就是因为缓存区的长度小于 当前包应该有的长度 导致了 他一直在接收中
而乱码则是因为 吧两次或者三次的内容合成了一个去解析
因为我传的内容的固定的都是 aaaa 所以 内容长度是4 加上好像有个头部长度为6 加起来 就是10
$this->_currentPackageLength
上面这个值就固定是10
[attach]2319[/attach]
可以看出 _recvBuffer 是接受过来的数据
但是经过输出他的长度 每次都在变化 有时7 有时6 有时10等
但是我的前端是从百度复制过来的 而且试了好几个百度的样稿 但是都没有用 接收到的数据的长度还是一直在变化
这是前端的代码
[attach]2320[/attach]
我想问 为什么我这个
$this->_recvBuffer
接收到的长度一直在变化 是前端问题 还是后台写的不对
运行
php -i | grep mbstring.func_overload截图下结果
函数被弃用了好像
[attach]2322[/attach]
改成0就好了,否则它会影响 字符串相关函数的返回值,比如 strlen substr 等等,导致无可预知的错误
那个东西改成0啊,大兄弟说清楚点,我不会啊。
改了,我试试
感谢大神 成功了