2012-05-29 92 views
14

使用SignalR,我想知道在以下情況下設置我的集線器的最佳方式是:假設我有一個網絡賭場應用程序(僅用於娛樂),它有三個遊戲,撲克,二十一點和老虎機。撲克和二十一點都是多人遊戲,所以他們有聊天功能,老虎機沒有。好吧,爲了支持這一點,我正在考慮以如下方式設置我的集線器。SignalR中的多個集線器(設計)

BaseHub(手柄連接東西,是常見的撲克,21點,和角子機)

PokerHub:BaseHub(句柄撲克遊戲)

BlackjackHub:BaseHub(柄酒杯遊戲)

SlotsHub:BaseHub(手柄插槽遊戲)

ChatHub(句柄聊天功能)

我是個讓這個Web應用程序的Poker頁面連接到PokerHub以及ChatHub和Blackjack頁面將執行類似的操作。 Slots頁面顯然只能連接到SlotsHub。

現在,我不確定的事情是:撲克/二十一點頁面應該連接到PokerHub/BlackjackHub和ChatHub,還是有一些方法,我可以讓它們只連接到PokerHub/BlackjackHub並委託聊天聊天中心的功能?在這種情況下,我可能會創建一個像IHasChat的界面或類似的東西。在任何情況下,ChatHub都應該擴展BaseHub?目前BaseHub只實現IConnected,IDisconnect,並且還處理基本的Group函數(JoinGroup,LeaveGroup)。另外,如果BaseHub是一個共享實例(單例)?

最後,如果你認爲我只是想完全錯誤,請讓我知道。這是我的第一個SignalR項目,我知道我不是這方面的專家。另外,我知道這裏實際上有幾個問題。如果你可以回答任何或所有問題,無論哪種方式,我都非常感激。

謝謝你, 湯姆

+0

我遇到了一個非常類似的情況下,我需要有不同配置多個集線器(如:不同的連接超時),但我的特殊情況似乎並不有可能與當前版本(V1.1.0) 。 – kzfabi

回答

0

這一直在這裏過一段時間,所以你可能不需要答案了,但...這裏不用什麼。

我是SignalR的新手,所以我對你的設計如何影響其性能有點不確定。如果這不是一個問題,我可能會考慮一個對象模型是這樣的:

abstract BaseHub : Hub; 
abstract MultiplayerHub : BaseHub; // (Handles chat and other MP necessities) 
BlackJackHub : MultiplayerHub; 
PokerHub : MultiplayerHub; 
SlotsHub : BaseHub; 

我想不出爲什麼要這樣設計會造成任何問題SignalR,但再次任何原因,我沒有有很多經驗可以繼續。

+0

這樣你只會分享聊天邏輯,使每個中心都可以聊天,但我認爲@Tom希望與所有中心共享聊天,這就是他談論ChatHub的原因。 – kzfabi

5

您可以擁有儘可能多的集線器,因爲只有一個連接到SignalR服務器。集線器是RPC實現,並且都共享相同的連接。 The Wiki page on hubs for the js client示出了一個連接,像這樣:

$.connection.hub.start() 

凡轂是JS客戶端內的命名空間。

0

實際上,它永遠不需要在服務器上有多個集線器類。它就像你需要多個互聯網連接。一個用於衝浪遊戲,另一個用於社交媒體,第三個用於不同的事物。

在服務器端創建一個Hub類。

你應該做的是有不同的客戶端使用JS。

例如在我的網站上,我有兩件事。在線聊天和離線通知。對於chat.aspx,我有一個名爲「聊天」的變量作爲Hub。對於所有其他頁面,我有一個名爲NotificationHub的變量。

你可以做類似下面

var pocker = $.connection.hub; 
var blackJack = $.connection.hub; 
var other = $.connection.hub; 

這樣調用相應的方法 另外如果你想找出誰調用你的服務器的方法,您可以將查詢字符串參數。

pocker.connection.qs = "type=pocker"; 
+1

但是你會在單個Hub類中有幾十種方法,那就好像是上帝的對象,反模式 –