是不是必须要在Worker onXXX事件回调方法里才能新建立连接?

zhouaini528

我的业务是用WS作为client端,我想在一个进程进行上成百上千的WS client连接, 但是这种连接是动态生成连接。根据文档案例如下代码:

$worker = new Worker();
$worker->onWorkerStart = function()
{
$con = new AsyncTcpConnection("ws://echo.websocket.org:80");

如果我想再主动连接一个WS。我的做法就是
$worker->onWorkerStart = function()
{
$con1 = new AsyncTcpConnection("ws://echo.websocket.org:80");
$con2 = new AsyncTcpConnection("ws://echo.websocket.org:80");

如果成百上千的主动连接,我的构思是用定时器来检测是否有主动连接需求
$worker->onWorkerStart = function(){
Timer::add(1, function() {
new AsyncTcpConnection("ws://echo.websocket.org:80");
});
}
进程不重启的情况下,通过定时检查,来判断是否有新的主动连接。
然后我的奇葩想法来了,因为有闭包又想简化代码结构,我已经开启了worker了,那么我是否不用再onXXX里去new AsyncTcpConnection ,在任何地方都可以new?我试过了不成功,所有想问问。

1756 1 0
1个回答

walkor

onWorkerStart运行完之后,可以在任意的位置初始化AsyncTcpConnection 连接

  • zhouaini528 2020-10-09

    我测试了必须要在onWorkerStart function里new 才不会报错。
    如下:
    $worker = new Worker();
    $worker->onWorkerStart = function()
    {
    $con = new AsyncTcpConnection("ws://echo.websocket.org:80");
    $con->connect();

    //同一作用域下 add timer 内初始化对象要报错。

    Timer::add(1, function() {
    $con = new AsyncTcpConnection("ws://echo.websocket.org:80");
    $con->connect();
    });

  • walkor 2020-10-09

    为什么不把报错贴出来?

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