测试一: 操作系统:centos7 PHP版本:5.6、7.0.12、7.0.33、7.3.0 现象:发送的字符串一旦ASCII编码超过127(十进制)就无法接收。 截图: [attach]1575[/attach] 测试二: 操作系统:Windows10 PHP版本:7.0.33 现象:收发正常 截图: [attach]1574[/attach]
截图下linux系统下workerman启动界面
[attach]1577[/attach]
你连的是哪个地址?
Internet of Things Services tcp://0.0.0.0:8052
截图下代码,看下在哪里打印的
/** *当客户端通过连接发来数据时(Workerman收到数据时)触发的回调函数 * @param $connection 连接对象 * @param $data 客户端连接上发来的数据 */ public function onMessage($connection,$data) { $a = bin2hex($data); echo "\n".$data."\n"; echo $a."\n"; //$connection->send(json_encode($data)); }
有必要说明一下,swoole也存在同样的问题。
到服务器上抓包看下数据发过来没 tcpdump -Ans 4096 -iany port 8052
每次发送看到服务器是收到了,但是Workerman 没收到,见下面截图
[attach]1578[/attach]
再启动个终端,运行 ps aux | grep 8052
貌似是服务器没收到 我看到每次发送服务器显示length 0
[attach]1579[/attach]
把进程数改成1,然后重启。 运行ps aux | grep 8052 找到进程的pid 运行strace -ttp pid 然后请求看下strace结果 发送其它数据的时候linux下可以收到嘛?
显示收到了 [attach]1580[/attach]
[attach]1581[/attach]
lsof -nPp pid 截图下结果
[attach]1582[/attach]
看起来没有问题,strace结果也看到有数据输出到终端上。如果终端上看不到可能是终端环境问题,你可以尝试将数据写到文件里看下是否收到。 写入文件的时候使用绝对路径
谢谢的确收到了,问题解决了,只要直接将16进制数据不转码显示,编码超过127(ASCII扩展字符集)控制台直接将所有打印数据重定向到null里面去了。
截图下linux系统下workerman启动界面
[attach]1577[/attach]
你连的是哪个地址?
Internet of Things Services tcp://0.0.0.0:8052
截图下代码,看下在哪里打印的
有必要说明一下,swoole也存在同样的问题。
到服务器上抓包看下数据发过来没
tcpdump -Ans 4096 -iany port 8052
每次发送看到服务器是收到了,但是Workerman 没收到,见下面截图
[attach]1578[/attach]
再启动个终端,运行 ps aux | grep 8052
貌似是服务器没收到
我看到每次发送服务器显示length 0
[attach]1579[/attach]
把进程数改成1,然后重启。
运行ps aux | grep 8052 找到进程的pid
运行strace -ttp pid
然后请求看下strace结果
发送其它数据的时候linux下可以收到嘛?
显示收到了
[attach]1580[/attach]
[attach]1581[/attach]
lsof -nPp pid
截图下结果
[attach]1582[/attach]
看起来没有问题,strace结果也看到有数据输出到终端上。如果终端上看不到可能是终端环境问题,你可以尝试将数据写到文件里看下是否收到。 写入文件的时候使用绝对路径
谢谢的确收到了,问题解决了,只要直接将16进制数据不转码显示,编码超过127(ASCII扩展字符集)控制台直接将所有打印数据重定向到null里面去了。