onMessage方法 有时正常 有时没反应 有时乱码 随机产生

l6578117

心血来潮想弄一下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
接收到的长度一直在变化 是前端问题 还是后台写的不对
 

2705 3 0
3个回答

walkor

运行
php -i | grep mbstring.func_overload截图下结果

l6578117

[attach]2322[/attach]
 

  • 暂无评论
walkor

改成0就好了,否则它会影响 字符串相关函数的返回值,比如 strlen substr 等等,导致无可预知的错误

年代过于久远,无法发表回答
🔝