16

使用 SignalR,我想知道在以下情况下设置集线器的最佳方法是什么:假设我有一个网络赌场应用程序(只是为了好玩),它有三个游戏,扑克、二十一点和老虎机。扑克和二十一点都是多人游戏,因此它们具有聊天功能,而老虎机则没有。好的,为了支持这一点,我正在考虑以下列方式设置我的集线器。

BaseHub(处理扑克、二十一点和老虎机常见的连接内容)

PokerHub : BaseHub(处理扑克游戏)

BlackjackHub : BaseHub(处理二十一点游戏)

SlotsHub : BaseHub(处理老虎机游戏)

ChatHub(处理聊天功能)

我正在考虑让这个网络应用程序的扑克页面连接到 PokerHub 以及 ChatHub 和二十一点页面会做类似的事情。Slots 页面显然只会连接到 SlotsHub。

现在,我不确定的是:Poker/BlackjackHub 页面是否应该同时连接到 PokerHub/BlackjackHub 和 ChatHub,或者有什么方法可以让它们只连接到 PokerHub/BlackjackHub 并将聊天功能委托给 Chat中心?在那种情况下,我可能会创建一个接口 IHasChat 或类似的东西。在任何一种情况下,ChatHub 是否也应该扩展 BaseHub?目前 BaseHub 只实现了 IConnected、IDisconnect 并且还处理了基本的 Group 功能(JoinGroup、LeaveGroup)。另外,BaseHub 是否应该是共享实例(单例)?

最后,如果您认为我的做法完全错误,请告诉我。这是我的第一个 SignalR 项目,我知道我不是这方面的专家。另外,我知道这里实际上有几个问题。如果您能回答其中任何一个或所有问题,无论哪种方式,我都非常感激。

谢谢你,汤姆

4

3 回答 3

5

您可以拥有任意数量的集线器,因为只有一个与 SignalR 服务器的连接。集线器是一种 RPC 实现,并且都共享相同的连接。 js 客户端集线器上的 Wiki 页面显示如下连接:

$.connection.hub.start()

其中 hub 是 js 客户端内部的命名空间。

于 2013-01-27T22:41:35.417 回答
1

实际上,它从不需要在服务器上有多个集线器类。就像您需要多个互联网连接一样。一个用于冲浪游戏,另一个用于社交媒体,第三个用于不同的东西。

在服务器端创建单个 Hub 类。

你应该做的是让不同的客户端使用 JS。

例如,在我的网站上,我有两件事。实时聊天和离线通知。对于chat.aspx,我有一个名为“chat”的变量充当集线器。对于所有其他页面,我有一个名为 NotificationHub 的变量。

您可以执行以下操作

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

这种方式调用各自的方法此外,如果您想识别谁调用了您的服务器方法,您可以附加查询字符串参数。

pocker.connection.qs = "type=pocker";
于 2014-09-08T11:27:35.020 回答
0

这已经有一段时间了,所以你可能不再需要答案了,但是......这里什么都没有。

我是 SignalR 的新手,所以我有点不确定您的设计会如何影响其性能。如果这不是问题,我可能会考虑这样的对象模型:

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

我想不出这种设计会导致 SignalR 出现任何问题的任何原因,但同样,我没有太多经验可以继续。

于 2012-11-30T20:01:01.870 回答