2012-07-27 22 views
1

我試圖建立一個小的應用程序使用的是Node.js,表達和socket.io,其中涉及處理基本的社會關係。有多個用戶,你可以請求與他們交朋友,接受這些請求,拒絕他們,並且不友好的用戶 - 基本上,很像Facebook。如果用戶A登錄並且用戶B請求與他的友誼,我希望立即通知用戶A關於朋友請求。這是websocket(和混淆)進入的地方。的WebSockets和社會關係

  1. 每個用戶都有三個不同的套接字連接,對應三個數據集合嗎? (1)朋友,(2)接收的請求,(3)發送的請求

  2. 在接受所接收的請求的用戶,其他用戶將需要被告知,他的發送的請求已被接受。這是否需要在其他用戶的套接字上觸發事件?如果該套接字因用戶不在線而不存在,該怎麼辦?

道歉,如果有困惑,但我很難理解如何概念化套接字之間的關係。

回答

1

這一切(包括以前的答案),將成爲一個整體更加清晰給你。這種模式的重要方面是:

1)您有「人」(「健談」),誰都有「意猶未盡」,可能會感興趣的人。 2)你有「人」(「聽衆」),他們每個人都想「聽」一些其他的「人」(儘管很少只有任何人;他們中的大多數人都會挑選他們聽的人,如果只是以防止被壓倒)。

發佈/訂閱模式描述瞭如何將談話者與聽衆「連接」,使得談話者不必擔心必須跟蹤他們的聽衆是誰,並且聽衆不必擔心必須保持跟蹤他們決定聽的那些說話者(即他們不必「聽到」每個人都在說話,並試圖將噪音過濾到他們感興趣的地方)。

正如MagicDev指出的那樣,這通常涉及一個對象,其數據部分記錄誰在監聽哪個講話者,並且其方法允許講話者說「我在說這個主題」(「發佈」)和聽衆說:「我希望得到通知時(講話者的名單,或者‘任何人’)談論某一主題(這有可能是‘任何學科’)。

‘朋友關係’通常指‘人’ A成爲「人」B的「說話人」,作爲「聽衆」,反之亦然;然而,pubsub模式中沒有任何要求這種對稱性的東西;一個好的實現會讓你使用相同的方法來建立「廣播「和」對話「​​

+0

這非常有用。謝謝。有關「pubsub」的任何特定資源,您可以推薦? – bento 2012-07-27 16:26:22

+0

Socket.io有一個名爲'rooms'的特性,顧名思義,它允許我們創建一個鏈接訂閱者和發佈者的對象。我是否想爲每個友誼動態地創建一個「房間」,這樣每個房間的廣播(無論哪種方式)都會被另一個接收到?然後,在某些問題上存儲這些「房間」(即對象)的問題 - 可能是redis。這是正確的道路嗎? – bento 2012-07-27 18:29:59

1

您可以將每個套接字設置爲對象,該套接字對應於特定的用戶數據。如果你不熟悉對象和其他結構化數據,這是非常重要的,如果沒有這些,你不會變得非常遠。

你會因爲數據正在舉行一個對象,其中將包括每個用戶在一個數組,然後將舉行由ID每個用戶的信息,包括朋友,請求等

陣列ID被叫用戶在服務器端,即使客戶端的用戶關閉套接字,數據已經傳遞給變量並保存在服務器端。


在節點這樣做完全是要採取相當多的努力,如果你不熟悉,我將首先建立一個mysql數據庫的應用開始,然後玩弄持有內的數據應用程序。如果您對「發佈/訂閱模式」(「發佈 - 訂閱」)讀了

+0

感謝您的回覆。我實際上已經建立並運行了模型和數據庫,並通過REST api與客戶端進行交互,這是我在express中建立的。每個用戶都有一個用戶標識(我正在使用Mongo),並且已經爲請求,朋友等嵌入了對象。所以這些對象已經存在 - 但我不確定我是如何將它們與套接字相關聯的。你能解釋一下嗎當你說'將每個套接字設置爲對象'時,你的意思是什麼? – bento 2012-07-27 05:50:01

+0

基本上,當套接字連接到您的後端作爲某個用戶名時,如果該用戶名不存在於用戶對象中,那麼您將其推送到數組,然後在相同的函數中使用構造函數定義其餘屬性然後您可以在其中引用您正在與之交互的套接字,並使用用戶對象將值應用於該套接字 – 2012-07-27 05:54:04