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

怎么只獲取客戶端發(fā)來的第一條數(shù)據(jù)?

edgexie

只獲取客戶端的第一條數(shù)據(jù).因為在客戶端剛打開的時候,第一條數(shù)據(jù)設(shè)置了名字發(fā)送給服務(wù)器的.我想把這個名字廣播出去.

我這樣做,但我覺得代碼質(zhì)量不高,不可靠.不知道在什么地方有類似的demo或者思路.

$ws_worker->onConnect = function($connection)use($ws_worker)
{
$connection->onMessage = function($connection,$data)use($ws_worker)
{
//客戶端心跳每5秒的字符串是/ff00,第一次收到客戶端的消息,認(rèn)為此消息為客戶端發(fā)來的用戶名,設(shè)置$connection->userName
//判斷該消息不是心跳消息,且是第一次連接沒有$connection->userName內(nèi)容.則此時為第一包用戶名消息.
if($data!='/ff00'&&empty($connection->userName)){
$connection->userName=$data;
foreach($ws_worker->connections as $connection){
$connection->send($data);
}
}else{
//其他消息的業(yè)務(wù)代碼.
}
};
};

2910 2 0
2個回答

latin

在onMessage回調(diào)中獲取數(shù)據(jù)。
如果只想獲取第一條數(shù)據(jù),可以在onMessage中得到數(shù)據(jù)后直接關(guān)閉客戶端連接。

  • edgexie 2016-09-13

    好暴力啊.我是客戶端做了心跳.
    客戶端輸入名字點擊確定以后建立websocket連接,此時的名字是第一個有用的數(shù)據(jù),需要廣播給所有其他進程中的客戶端.
    隨后心跳到服務(wù)器的內(nèi)容服務(wù)器不廣播.但在客戶端心跳周期中(我設(shè)置的是5sec),還有一些該客戶端發(fā)來的聊天內(nèi)容,需要廣播給進程中的其他客戶端.
    沒有思路,想了好久了.

damao

我覺得這個思路可以。
再完善一點就是每個請求利用json,加個type字段,
{"type":"set_name","name":"xxxx"}
{"type":"ping"}

我看workerman有些例子就是這么寫的

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