在node使用socket.io進行websocket通信時,會遇到一個問題 ——服務器如何向指定客戶端發送消息,只會群發多么無聊對吧。
我們知道,客戶端與服務器建立鏈接會觸發connection事件
io.on("connection",function(socket){
//其他騷操作
});
其中,參數socket為服務器與客戶端建立連接的socket端口對象,其有一個名為id的屬性,該屬性可以識別指定客戶端。
在1.0之前,我們是醬紫實現向指定客戶端推送消息的
io.on("connection",function(socket){
io.sockets.socket(socket.id).emit('message','surprise');
});
在1.0之后,我們采用如下方式
io.on("connection",function(socket){
if (io.sockets.connected[socket.id]) {
io.sockets.connected[socket.id].emit('message','surprise');
}
});
這里先判斷一下對應sockeid存不存在,如果不存在則意味着對方沒有在線上,我們需要做對應的處理使對方上線后可以收到消息,我的做法是先保存到數據庫中,等上線之后從數據庫中讀取離線時沒有收到的消息。
另外,還可以這樣做
io.on("connection",function(socket){
io.to(socket.id).emit('message','surprise');
});