在用Workerman 2.x的版本,發(fā)現(xiàn)這樣一個(gè)問題:
我們的協(xié)議是類似!abc#222#abc!(協(xié)議里本來用的是星號(hào),因?yàn)轭A(yù)覽里不能顯示星號(hào),這里用!替換了星號(hào))這樣的格式,在onGatewayMessage函數(shù)中,檢查消息是否完整的函數(shù)是這樣子的:
public static function check($buffer)
{
if (strrchr($buffer, '#abc!') === '#abc!') {
return 0;
}
return 1;
}
在onMessage函數(shù)中打印接收的消息,發(fā)現(xiàn)當(dāng)消息小于200字節(jié)時(shí),是完整的,即有消息結(jié)束標(biāo)記,但是當(dāng)消息內(nèi)容大于200字節(jié)時(shí),打印出的消息卻是不完整的(剛好200字節(jié),結(jié)束標(biāo)記不見了),那么這樣的消息為什么能通過check方法的檢查呢,或者是通過檢查后被什么截?cái)嗔四兀ㄎ易约翰]有寫代碼去截?cái)嘞ⅲ?/p>
“strrchr() 函數(shù)查找字符串在另一個(gè)字符串中最后一次出現(xiàn)的位置,并返回從該位置到字符串結(jié)尾的所有字符。”
這個(gè)函數(shù)用法為什么不對呢,我這樣子判斷消息的結(jié)尾為什么不行?
http://php.net/manual/zh/function.strrchr.php
注意看手冊:
strrchr — 查找指定字符在字符串中的最后一次出現(xiàn)
查找指定字符,而不是查找指定字符串哦