我的业务是用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?我试过了不成功,所有想问问。
onWorkerStart运行完之后,可以在任意的位置初始化AsyncTcpConnection 连接
我测试了必须要在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();
});
为什么不把报错贴出来?