国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

websocket協(xié)議在onConnect時為什么不能發(fā)送數(shù)據(jù)

walkor

使用websocket協(xié)議,為什么無法在onConnect的時候發(fā)送數(shù)據(jù)?使用其它協(xié)議就可以。

8310 1 0
1個回答

walkor 打賞

websocket協(xié)議在tcp建立連接后有個握手的通訊過程,onConnect回調(diào)是在TCP建立連接后立刻被調(diào)用,如果在TCP建立連接后立刻在onConnect發(fā)送數(shù)據(jù)給客戶端,會擾亂websocket握手,導致websocket握手失敗。

workerman中在使用websocket協(xié)議時,有個onWebSocketConnect回調(diào),這個回調(diào)是在websocket握手成功真正建立起websocket連接后的回調(diào),用法如下:

Worker項目:

$ws = new Worker('websocket://0.0.0.0:12345');
// 當tcp建立連接時的回調(diào)
$ws->onConnect = function($connection)
{
    // 設置這個連接的onWebSocketConnect協(xié)議回調(diào)
    // 即websocket握手成功真正建立起websocket連接后的回調(diào)
    $connection->onWebSocketConnect = function($connection)
    {
        // 當websocket連接建立起來后,向客戶端發(fā)送數(shù)據(jù)
        $connection->send("hello");
    };
};

GatewayWorker項目:
目前在GatewayWorker中不支持在Event.php設置onWebSocketConnect回調(diào),但可以在$gateway初始化時指定$gateway的onWebSocketConnect回調(diào),方法和上面一樣。

$gateway = new Worker('websocket://0.0.0.0:12345');
$gateway->onConnect = function($connection)
{
    $connection->onWebSocketConnect = function($connection)
    {
        $connection->send("hello");
    };
};

GatewayWorker項目注意:
$gateway初始化的onWebSocketConnect 回調(diào)運行在Gateway進程,在onWebSocketConnect 回調(diào)中無法使用Gateway::XXX相關(guān)的接口,可以使用$connection->send()發(fā)送數(shù)據(jù)。也無法直接使用$_SESSION。
onWebSocketConnect 中:
目前可以通過$connection->globalClientId 獲得戶端的client_id
目前可以通過unserialize($connection->session)獲得當前客戶端在Event::onXXX設置的$_SESSION;
目前也可以$connection->session = serialize($session_data); 設置客戶端的$_SESSION,設置的session數(shù)據(jù)在Event::onXXX中可以訪問到

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??