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

關(guān)于 聊天室的Event的兩個(gè)函數(shù)問(wèn)題('sendToCurrentClient'與'sendToGroup'的 區(qū)別)?

627894178

最新的2.0文檔里更新了Event.php,發(fā)現(xiàn)里面有各一個(gè)地方我不是很理解

// 轉(zhuǎn)播給當(dāng)前房間的所有客戶(hù)端,xx進(jìn)入聊天室 message {type:login, client_id:xx, name:xx} 
$new_message = array('type'=>$message_data, 'client_id'=>$client_id, 'client_name'=>htmlspecialchars($client_name), 'time'=>date('Y-m-d H:i:s'));
Gateway::sendToGroup($room_id, json_encode($new_message));
Gateway::joinGroup($client_id, $room_id);

// 給當(dāng)前用戶(hù)發(fā)送用戶(hù)列表
$new_message = $clients_list;
Gateway::sendToCurrentClient(json_encode($new_message));

請(qǐng)看 上面代碼,以上是在Event的 71行-78行的代碼,在這里的sendToCurrentClient(),為什么不用sendToGroup()?,你們看。既然是獲取當(dāng)前在線的用戶(hù)列表,那我已經(jīng)上線了,就已經(jīng)在當(dāng)前Group里面了,那為什么還要使用sendToCurrentClient()?用sendToGroup()的話(huà),可以一起推送,這樣做反而可以減方便很多,你們說(shuō)呢?所以我不是很理解!

謝謝!

6178 1 0
1個(gè)回答

walkor 打賞

兩個(gè)方法的作用
Gateway::sendToGroup是給某個(gè)用戶(hù)組(這里是房間)的用戶(hù)連接發(fā)送數(shù)據(jù)
Gateway::sendToCurrentClient是給當(dāng)前用戶(hù)連接發(fā)送數(shù)據(jù)。

用戶(hù)登錄數(shù)據(jù)交互流程
1、先給當(dāng)前房間所有在線用戶(hù)廣播(Gateway::sendToGroup)有人登錄,瀏覽器收到login數(shù)據(jù)后將新用戶(hù)展示到在線列表里面
2、給當(dāng)前登錄的用戶(hù)單獨(dú)放送(Gateway::sendToCurrentClient)在房間的線用戶(hù)列表

為什么當(dāng)前用戶(hù)要單獨(dú)發(fā)送?
因?yàn)楫?dāng)前用戶(hù)有個(gè)在線用戶(hù)列表數(shù)據(jù)。而這個(gè)在線列表數(shù)據(jù)根本不需要發(fā)送給其它已經(jīng)在線的用戶(hù),因?yàn)樗麄円呀?jīng)有了這份在線列表數(shù)據(jù),只需要增量添加新用戶(hù)即可。

在線用戶(hù)列表占用的帶寬
在線用戶(hù)列表數(shù)據(jù)可能會(huì)很大。例如2000人在線,每個(gè)用戶(hù)記錄大概50字節(jié),那么這個(gè)列表體積可能在100KB左右。

如果這100KB數(shù)據(jù)廣播給所有2000在線用戶(hù),那么將占用帶寬2000*100KB=200MB=1.6Gbit,沒(méi)錯(cuò),需要1.6G的帶寬。。。

如果是無(wú)差別的實(shí)時(shí)廣播所有在線用戶(hù),2000人的聊天室每秒一次的用戶(hù)登錄/退出就輕松把帶寬耗光了。

結(jié)論
所以只給當(dāng)前用戶(hù)發(fā)送所有的在線用戶(hù)列表,其他已經(jīng)在線的用戶(hù)只需要更新那一個(gè)上線的用戶(hù)數(shù)據(jù)。
這就是為什么要分別發(fā)送。

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??