2013-06-28 73 views
8

我有一個工作的WebSockets例如,當客戶端從服務器接收郵件發送舊消息。如何使用WebSockets

我不知道在連接時應該如何向客戶端發送舊消息。

例子:

  • 當他們連接
  • 服務器用「[名]剛接通」(向所有客戶端)
  • 響應每個客戶端提供自己的姓名任何新客戶端將無法獲得這些消息

我想知道是否有任何方式客戶端可以接收舊消息(無論是他們所有人,或過去5分鐘內的消息將是可以接受的)。

我懷疑我可能捕捉到了這個信息我自己,它存儲在某處(如數據庫),併發送消息給新客戶自己。那是對的,還是我錯過了什麼?

如果任何人有僞代碼,或向其他人如何實現這個例子的鏈接,這將是得心應手。

+0

是不是因爲服務器當前連接的客戶端列表發送到任何新的客戶端一樣簡單? – JeffRSon

+0

@JeffRSon我希望能夠發送任何任意數據。 –

+0

我不確定發送過期郵件是否有意義。假設客戶端已連接並斷開連接。你會把這兩個消息發送給任何新客戶嗎?或者你會知道,斷開連接的消息必須「刪除」以前連接的消息嗎?如果不是用於日誌記錄,則只應發送當前狀態。而對於日誌記錄,您必須保留大量信息才能發送 - 不過只有一次。 – JeffRSon

回答

4

您必須通過自己的捕捉到它並將其存儲在服務器上......一旦用戶連接,你將不得不名稱數據連接的所有客戶,您已存回誰已連接用戶的消息。所以,你將不得不代碼,數據廣播給用戶

通過你在使用服務器端的方式嗎? (節點,二郎等)

你可以,如果你正在使用Node.js的

http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial

+0

爾加。這很煩人。我希望通過找到一些隱藏在Websocket實現中的超酷「消息隊列」功能來避免它。是的,我正在使用節點。 –

+0

:)沒有超酷的「消息隊列」實施。然而,如果你希望實現的消息隊列的簡單,你可以使用RabbitMQ的或容易的其他消息隊列.. –

+0

會變成這樣可能在這裏:http://stackoverflow.com/questions/26056688/get-past-messages-from-websocket –

2

你可以做這樣的事情檢查以下鏈接:

  1. 每條消息應該有一個id - >muid消息唯一ID
  2. 每次客戶端發送消息時,來自服務器的ACK以及用於發送的消息的mull
  3. 每個在服務器側接收到新的消息時,一個MUID被分配,與ACK發送,並且還與消息發送到每個已連接的用戶。通過這種方式,視圖將能夠爲每個用戶呈現當時某個時刻的相同序列。
  4. 每個新用戶連接發送的最後MUID它已收到這樣的服務器知道這個用戶停止接收消息的時間。然後,服務器可以,只要你想發送儘可能多的舊消息,這取決於你實現類型的存儲:
    1. 全部歷史:我會建議數據庫存儲適當的索引
    2. 最後N消息:根據大小N可以簡單地將最後的N條消息存儲在一個固定大小的數組中,並在每次重新連接時發送所有或所需的數據塊。請記住,這將消耗內存,因此,爲1024個不同的聊天存儲最後的1024條消息會佔用相當多的內存,特別是如果消息的大小無限。

希望它可以幫助