2016-02-26 68 views
0

即時通訊實現一個聊天系統,您可以將個人消息發送給連接到便攜式計算機的特定人員。 首先即時將用戶名作爲密鑰與shocket.id一起放入名爲「connectedUser」的jason中。如何使用套接字io和節點快遞發送個人消息

socket.username=loggeduser; 
connectedUser[socket.username]=socket.id; 

然後即時通訊使用此代碼發送個人信息

socket.broadcast.to(connectedUser[usersnametobesent]).emit('chat', { message:result}); 

這個完美的作品,但每當我用這個就只顯示在接收機端的消息,但沒有客戶端。我需要將它顯示在發送者和接收者的身邊。

回答

1

簡單,

這是你所需要的:

io.to(socket.id).emit("event", data); 

每當用戶連接到服務器時,會產生插座細節,包括ID.This是ID確實有助於將消息發送到特定的人。

首先我們需要所有的socket.ids存儲陣列,

var people={}; 

people[name] = socket.id; 

這裏的名字是reciever名。例如:

people["ccccc"]=2387423cjhgfwerwer23; 

所以,現在我們可以每當我們發送的消息獲得與reciever名稱socket.id:爲此,我們需要知道recievername.You

需要發出reciever名到服務器。

最後一件事是:

socket.on('chat message', function(data){ 
io.to(people[data.reciever]).emit('chat message', data.msg); 
}); 

希望這很適合你!祝你好運

+0

真棒我做了一些類似的事情,它的工作得很好。無論如何都在等待更早的答案:D – TRomesh

2

您需要發送同樣的東西給發件人。

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消息這兩個客戶端都是垃圾郵件。

對不起格式我手機上。

+1

IM還挺新本shocketio東西你能解釋一下多一點? 以及如何使用DOM操作將聊天消息添加到客戶端? – TRomesh

+0

@tromesz看到我的編輯 – Datsik

+1

感謝得到它工作:)和備忘單是有用的 – TRomesh

相關問題