我的業(yè)務(wù)是用WS作為client端,我想在一個(gè)進(jìn)程進(jìn)行上成百上千的WS client連接, 但是這種連接是動(dòng)態(tài)生成連接。根據(jù)文檔案例如下代碼:
$worker = new Worker();
$worker->onWorkerStart = function()
{
$con = new AsyncTcpConnection("ws://echo.websocket.org:80");
}
如果我想再主動(dòng)連接一個(gè)WS。我的做法就是
$worker->onWorkerStart = function()
{
$con1 = new AsyncTcpConnection("ws://echo.websocket.org:80");
$con2 = new AsyncTcpConnection("ws://echo.websocket.org:80");
}
如果成百上千的主動(dòng)連接,我的構(gòu)思是用定時(shí)器來檢測(cè)是否有主動(dòng)連接需求
$worker->onWorkerStart = function(){
Timer::add(1, function() {
new AsyncTcpConnection("ws://echo.websocket.org:80");
});
}
進(jìn)程不重啟的情況下,通過定時(shí)檢查,來判斷是否有新的主動(dòng)連接。
然后我的奇葩想法來了,因?yàn)橛虚]包又想簡(jiǎn)化代碼結(jié)構(gòu),我已經(jīng)開啟了worker了,那么我是否不用再onXXX里去new AsyncTcpConnection ,在任何地方都可以new?我試過了不成功,所有想問問。
onWorkerStart運(yùn)行完之后,可以在任意的位置初始化AsyncTcpConnection 連接
我測(cè)試了必須要在onWorkerStart function里new 才不會(huì)報(bào)錯(cuò)。
如下:
$worker = new Worker();
$worker->onWorkerStart = function()
{
$con = new AsyncTcpConnection("ws://echo.websocket.org:80");
$con->connect();
}
//同一作用域下 add timer 內(nèi)初始化對(duì)象要報(bào)錯(cuò)。
Timer::add(1, function() {
$con = new AsyncTcpConnection("ws://echo.websocket.org:80");
$con->connect();
});