如果业务逻辑操作不放在onMessage中处理,那放在哪里呢

reed

初用workerman和gatewayworker框架,有几个问题想请教一下:

建立mysql和redis连接的时候,是不是必须都要放在Events.php的onWorkerStart中?
如果和业务相关的操作不放在onMessage中,那放在哪里呢?请看我贴的伪代码,我的业务主要就是接收硬件发送过来的16进制数据,然后存入redis和mysql,设备之间不需要通讯,只需要正确无误的把数据存入数据库就行,会频繁与数据库打交道,所有业务逻辑都写onMessage中了,请问这样写是否合理呢?
没有找到gatewayworker默认的日志存放在哪,如果框架有些异常,我该去哪查看…

 

[attach]1340[/attach]
 

5590 1 1
1个回答

walkor

1.建立mysql和redis连接的时候,是不是必须都要放在Events.php的onWorkerStart中?
 
建议放在onWorkerStart中,只初始化一次然后复用连接。但是实际上没有限制,你可以workerman启动后任意位置初始化数据库连接
 
2.如果客户端之前不需要通讯,用workerman即可。
onMessage只是入口,和我们平时开发php一样,index.php是入口,业务逻辑可以分发给其它文件的类处理。
例如 

<?php

$worker = new Worker('websocket://0.0.0.0:8787');
$worker->onMessage = function($connection, $data){
    //$data类似'{"class":"user", "method":"login", "params":}';
    $data = json_decode($data, true);
    $class = new $data;
    $method = $data;
    $params = $data;
    call_user_func_array($class, $method, $params);
};
Worker::runAll();

这样利用php类的自动加载(要自己写个autoload规则),就可以把业务分发给不同的类文件处理了
 
3.没有找到gatewayworker默认的日志存放在哪,如果框架有些异常,我该去哪查看…
 
框架只关注socket通讯,没有做业务框架,也没有业务的日志类,可以自己根据需要加载其它业务类去处理业务。框架自身有个workerman.log,默认在workerman目录平行的位置,里面会记录一些启动 停止 以及一些致命报错,但是不是给业务的日志类。
 

  • reed 2018-11-05

    明白了,感谢!
    业务日志肯定是我自己记录设置的,但是框架自身的日志我没找到,【框架自身有个workerman.log,默认在workerman目录平行的位置,里面会记录一些启动 停止 以及一些致命报错】。我用的gatewayworker,这个workerman.log我没找到。

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