未结束的消息也通过了检查

0

在用Workerman 2.x的版本,发现这样一个问题:
我们的协议是类似!abc#222#abc!(协议里本来用的是星号,因为预览里不能显示星号,这里用!替换了星号)这样的格式,在onGatewayMessage函数中,检查消息是否完整的函数是这样子的:


public static function check($buffer)
{
if (strrchr($buffer, '#abc!') === '#abc!') {
return 0;
}
return 1;
}

在onMessage函数中打印接收的消息,发现当消息小于200字节时,是完整的,即有消息结束标记,但是当消息内容大于200字节时,打印出的消息却是不完整的(刚好200字节,结束标记不见了),那么这样的消息为什么能通过check方法的检查呢,或者是通过检查后被什么截断了呢(我自己并没有写代码去截断消息)?

已邀请:

walkor

赞同来自:

你好,请用新版本吧,老版本的问题不讨论了

wudihzh

赞同来自:

这是旧版本的BUG吗?

walkor

赞同来自:

不是bug,是贴主协议没处理好。
strrchr的用法就不对

wudihzh

赞同来自:

“strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。”
这个函数用法为什么不对呢,我这样子判断消息的结尾为什么不行?

walkor

赞同来自:

http://php.net/manual/zh/function.strrchr.php
注意看手册:
strrchr — 查找指定字符在字符串中的最后一次出现


查找指定字符,而不是查找指定字符串哦

该问题目前已经被锁定, 无法添加新回复