Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Signalr 信号机中的多个集线器(设计)_Signalr - Fatal编程技术网

Signalr 信号机中的多个集线器(设计)

Signalr 信号机中的多个集线器(设计),signalr,Signalr,使用SignalR,我想知道在以下场景下设置集线器的最佳方法是什么:假设我有一个web赌场应用程序(只是为了好玩),它有三个游戏,扑克、21点和老虎机。扑克和21点都是多人游戏,所以它们有聊天功能,而老虎机没有。好的,为了支持这一点,我想用以下方式设置我的中心 BaseHub(处理扑克、21点和老虎机常见的连接内容) 扑克中心:BaseHub(处理扑克游戏) 21点中心:BaseHub(处理21点游戏) SlotsHub:BaseHub(处理老虎机游戏) 聊天中心(处理聊天功能) 我想让这个we

使用SignalR,我想知道在以下场景下设置集线器的最佳方法是什么:假设我有一个web赌场应用程序(只是为了好玩),它有三个游戏,扑克、21点和老虎机。扑克和21点都是多人游戏,所以它们有聊天功能,而老虎机没有。好的,为了支持这一点,我想用以下方式设置我的中心

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

扑克中心:BaseHub(处理扑克游戏)

21点中心:BaseHub(处理21点游戏)

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

聊天中心(处理聊天功能)

我想让这个web应用程序的扑克页面连接到PokerHub以及ChatHub和Blackjack页面也可以做类似的事情。Slots页面显然只会连接到SlotsHub

现在,我不确定的是:扑克/二十一点页面是否应该同时连接到PokerHub/BlackjackHub和ChatHub,或者我是否有办法让它们只连接到PokerHub/BlackjackHub并将聊天功能委托给聊天中心?在这种情况下,我可能会创建一个类似iHascat之类的接口。在这两种情况下,ChatHub是否也应该扩展BaseHub?目前,BaseHub仅实现IConnected、IDisconnect,还处理基本的组功能(JoinGroup、LeaveGroup)。此外,BaseHub是否应该是共享实例(单实例)

最后,如果你认为我完全错了,请告诉我。这是我的第一个信号机项目,我知道我不是这方面的专家。另外,我知道这里实际上有几个问题。如果你能回答其中任何一个或所有问题,我真的很感激

谢谢,,
汤姆

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

我是新来的信号,所以我有点不确定你的设计会如何影响它的性能。如果这不是一个问题,我可能会考虑这样的对象模型:

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

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

您可以有任意多个集线器,因为只有一个连接到Signal服务器。集线器是一个RPC实现,所有集线器共享相同的连接。 显示如下所示的连接:

$.connection.hub.start()

其中hub是js客户机中的名称空间。

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

在服务器端创建一个集线器类

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

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

你可以像下面这样做

var pocker = $.connection.hub;
var blackJack = $.connection.hub;
var other = $.connection.hub;
这样可以调用相应的方法 另外,如果您想确定谁调用了您的服务器方法,可以附加查询字符串参数

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

我遇到了一个非常相似的情况,我需要有多个具有不同配置的集线器(例如:不同的连接超时),但我的特定情况在当前版本(v1.1.0)中似乎不可能实现。这样,您将只共享聊天逻辑,使每个集线器都有一个聊天室,但我认为@Tom希望与所有集线器共享聊天室,这就是他谈论聊天室的原因。但在单个集线器类中,您将有几十个方法,这似乎是上帝对象,反模式