您需要發送同樣的東西給發件人。
socket.emit('chat', {});
該函數將只發送到這一點插座。
爲什麼不使用一些DOM操作將聊天消息添加到客戶端。這也將增加更好的用戶體驗,因爲無論出於何種原因,如果發生嚴重滯後,您的發件人會立即看到他發送的消息,而不是等待看到從套接字返回的消息。
這裏是插座一個可愛的小小抄:
// sending to sender-client only
socket.emit('message', "this is a test");
// sending to all clients, include sender
io.emit('message', "this is a test");
// sending to all clients except sender
socket.broadcast.emit('message', "this is a test");
// sending to all clients in 'game' room(channel) except sender
socket.broadcast.to('game').emit('message', 'nice game');
// sending to all clients in 'game' room(channel), include sender
io.in('game').emit('message', 'cool game');
// sending to sender client, only if they are in 'game' room(channel)
socket.to('game').emit('message', 'enjoy the game');
// sending to all clients in namespace 'myNamespace', include sender
io.of('myNamespace').emit('message', 'gg');
// sending to individual socketid
socket.broadcast.to(socketid).emit('message', 'for your eyes only');
感謝https://stackoverflow.com/a/10099325
爲了回答您的評論:
在插座的情況下,如果你是從客戶端發送聊天消息,所以我們得到了client1和client2
假設你有一個聊天窗口,你可能有一些divs
,也許一些像列出ul
客戶端1發送到客戶端2 --->「你好」
客戶端1應該立即看到消息「你好」用簡單的Dom比如創建一個新的div/li
並將其附加到聊天窗口中,可能會使用某種ID來跟蹤消息。
然後,如果郵件發送失敗,您可以通過id找到失敗的郵件,將其刪除,也可以附加一條錯誤消息,說什麼,郵件發送失敗。
同時客戶端2是沒有任何的消息曾經被髮送
如果您使用套接字來填充消息爲用戶,那麼你可能會遇到在那裏
客戶端1發送到客戶端2的情況下,明智的---- >「你好」
現在,也許您的服務器具有打嗝或客戶端失去了第二個連接無論出於何種原因,他沒有看到他的消息,但和去哦,也許它沒有派讓他去
Client1發送給Cli ENT2 ----> 「你好」
客戶端1發送到客戶端2 ----> 「你好」
客戶端1發送到客戶端2 ----> 「你好」
還是什麼都沒有,他不它再多20次。
突然,服務器或任何解鎖併發送300 hello消息這兩個客戶端都是垃圾郵件。
對不起格式我手機上。
真棒我做了一些類似的事情,它的工作得很好。無論如何都在等待更早的答案:D – TRomesh