2016-02-14 118 views
0

我會給我一個小試想做的前提。我有一個遊戲理念,需要多位玩家圍坐在桌子上,像撲克一樣。節點JS Socket.IO發射器(和redis)

不同玩家之間的正常交互很容易通過socket.io與節點js一起處理。

我很難找出是什麼;我有一個cron工作,在另一個過程中運行,每分鐘獲取新信息,然後發送給每個玩家。由於這是一個不同的過程,我不確定我如何向某些客戶端發送這些信息。

socket.io確實有此信息,並且,我下面引用它:

在某些情況下,你可能想發出事件中的插座Socket.IO命名空間/間距離的範圍之外你的Socket.IO進程。 有幾種方法可以解決這個問題,比如實現自己的頻道以將消息發送到流程中。 爲了便於使用的情況下,我們創建了兩個模塊: socket.io-redis的 socket.io - 發射極

據我瞭解,我需要這兩個模塊做什麼,我前面提到的。然而,我不明白爲什麼當我只需要發送一些消息時,redis在等式中。

是否用來臨時存儲消息?

任何幫助將不勝感激。

回答

0

那麼在socket.io提供這些的情況下,我讀到,你實際上需要兩個。然而,這不一定是你想要的。但是,是的,redis可能只是用於臨時存儲數據,它也通過接近消息隊列的功能來做出非常好的工作。

你的cron現在不需要消息隊列或類似的行爲。

我的建議雖然是將你的程序中的一些節點包作爲child_process鉤子運行到它可讀的流中,然後直接推送到你的套接字。

+0

我打算使用羣集創建多個(socket.io)進程,我希望不會造成任何不規則性。我不知道從這些流程中分出是否是最好的主意。 我期待至少10k-50k併發連接。所以我需要通過集羣來處理流量的多個進程。 –

0

如果cron作業進程也是nodejs進程,則可以通過redis.io pub-sub客戶機機制交換數據。

讓我知道什麼是在和情況發佈 - 訂閱機制,進一步幫助您需要cron作業過程..

Redis的是socket.io使用的內存的商店之一(如果配置)

-1

只有當您有多服務器配置(集羣)才能在這些node.js實例之間建立連接和空間/名稱空間同步時,您必須使用redis。在這種情況下,它與存儲數據無關,它可以作爲pub/sub機器使用。