版本:Gateway 最新版本
自定义协议
在 decode 方法中,对收到的数据进行解析,在 decode 方法的结尾处,返回一个数组,结果如:
某些情况下,在 decode 中已经解析了数据,并且 decode 方法也正确的执行结束了,但 onMessage 函数并没有收到新数据。
可能的原因有哪些?
请问在哪里可以看到错误信息?包括 gateway 本身错误信息?
一般是协议处理有问题或者客户端发的数据不符合协议
协议是自定义的,而且已经进入了 decode 函数,我自己都解析成功了
decode 的函数的返回值有限制吗?
返回值任意,如果进了decode没有数据,可能是返回的就是空数据
不是数据空,而是 decode 方法正确的执行结束后,OnMessage 函数并没有被执行。OnMessage 函数第一行就是打印日志,但在某些情况下,一直未被执行,有些情况是正常的
decode 函数使用 try catch 有关系吗?
再检查下协议代码吧。
我再检查一下, decode 的函数的 try catch 去掉了,OnMessage 就正常收到了
为 Workerman 项目捐赠了100元,仅表心意,谢谢
非常感谢
2017-05-24 20:41:01 pid:20362 process_timeout:
2017-05-24 20:44:52 pid:20380 process_timeout:
这个可能是 decode 方法正确的执行了,但 OnMessage 方法不被调用的可能原因?
onMessage里的业务太慢了,超时了。 比如onMessage里执行30秒才执行完, 那么第二个请求要等第一个onMessage执行完毕才能执行onMessage,所以会有onMessae没执行的假象
是的,刚发现是之前在 OnMessage 调用的一个函数里,有个 sleep(60)的代码 有没有 OnMessage 异步处理逻辑的方法?
慢的任务可以交给其它进程去做,避免阻塞主业务 比如这个 http://doc.workerman.net/315283
非常感谢,之前通读了一遍手册,感觉 还是读的不精。谢谢了
一般是协议处理有问题或者客户端发的数据不符合协议
协议是自定义的,而且已经进入了 decode 函数,我自己都解析成功了
decode 的函数的返回值有限制吗?
返回值任意,如果进了decode没有数据,可能是返回的就是空数据
不是数据空,而是 decode 方法正确的执行结束后,OnMessage 函数并没有被执行。OnMessage 函数第一行就是打印日志,但在某些情况下,一直未被执行,有些情况是正常的
decode 函数使用 try catch 有关系吗?
再检查下协议代码吧。
我再检查一下, decode 的函数的 try catch 去掉了,OnMessage 就正常收到了
为 Workerman 项目捐赠了100元,仅表心意,谢谢
非常感谢
2017-05-24 20:41:01 pid:20362 process_timeout:
1 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Events/Select.php(231): pcntl_signal_dispatch()
2 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Worker.php(1561): Workerman\Events\Select->loop()
3 /data/wwwroot/sd_watch_gateway/vendor/workerman/gateway-worker/src/BusinessWorker.php(183): Workerman\Worker->run()
4 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Worker.php(959): GatewayWorker\BusinessWorker->run()
5 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Worker.php(922): Workerman\Worker::forkOneWorker(Object(GatewayWorker\BusinessWorker))
6 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Worker.php(430): Workerman\Worker::forkWorkers()
7 /data/wwwroot/sd_watch_gateway/start.php(38): Workerman\Worker::runAll()
8 {main}
2017-05-24 20:44:52 pid:20380 process_timeout:
1 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Events/Select.php(231): pcntl_signal_dispatch()
2 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Worker.php(1561): Workerman\Events\Select->loop()
3 /data/wwwroot/sd_watch_gateway/vendor/workerman/gateway-worker/src/BusinessWorker.php(183): Workerman\Worker->run()
4 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Worker.php(959): GatewayWorker\BusinessWorker->run()
5 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Worker.php(922): Workerman\Worker::forkOneWorker(Object(GatewayWorker\BusinessWorker))
6 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Worker.php(1075): Workerman\Worker::forkWorkers()
7 /data/wwwroot/sd_watch_gateway/vendor/workerman/workerman/Worker.php(433): Workerman\Worker::monitorWorkers()
8 /data/wwwroot/sd_watch_gateway/start.php(38): Workerman\Worker::runAll()
9 {main}
这个可能是 decode 方法正确的执行了,但 OnMessage 方法不被调用的可能原因?
onMessage里的业务太慢了,超时了。
比如onMessage里执行30秒才执行完,
那么第二个请求要等第一个onMessage执行完毕才能执行onMessage,所以会有onMessae没执行的假象
是的,刚发现是之前在 OnMessage 调用的一个函数里,有个 sleep(60)的代码
有没有 OnMessage 异步处理逻辑的方法?
慢的任务可以交给其它进程去做,避免阻塞主业务
比如这个
http://doc.workerman.net/315283
非常感谢,之前通读了一遍手册,感觉 还是读的不精。谢谢了