0

我们目前正在评估实现服务器发送事件的解决方案(不一定使用服务器发送事件事件源传输)。

我们的用例实际上与 Stackoverflow 非常相似。我们有一个定制的 CMS 实现为支持协作编辑的 SPA。作为第一步,我们希望服务器在另一个用户修改它时通知同一页面上的所有客户端。

显而易见的选择是为此选择 SignalR,但XSockets 比较页面上的这个声明让我想到:

如果一个框架向所有连接的客户端广播数据,我们刚刚反转了 AJAX 问题,现在我们有一个服务器用他们不想要的信息锤击客户端。

SignalR 2 仍然如此吗?我的意思是,无论组成员身份如何,都不会向所有客户广播会使组一开始就完全没用吗?

一些统计数据

  • > 10000 活跃用户
  • > 10000 页
4

3 回答 3

2

发送到 signalr 中的组的消息只会到达该组中的客户端。因此,如果您使用群组,则无需担心广播。群组很聪明,除非您必须像@Lars Höppner 所描述的那样,群组不是动态的,它们实际上只是一个非常简单的订阅。就像拥有 pub/sub 一样,您说您正在订阅主题“A”,但在 SignalR 中,您是组“A”的成员。

如果您不使用组信号器将广播,那可以,但请考虑这一点。

您有 2 个页面“A”和“B”,它们都连接到集线器“MyHub”。当您从“MyHub”向所有客户端发送消息到方法“MyMessage”并且只有页面“A”为“MyMessage”实现了客户端方法时,页面“B”上的客户端仍会收到该消息发送到如果您查看框架选项卡(在 chrome 中),则浏览器因此消息将到达对消息不感兴趣的客户,在您获得大量客户或发送敏感数据之前,这没什么大不了的。

如果你从不从 2 个不同的页面连接到同一个集线器,你会没事的。如果你总是使用组,你也会没事的。否则你将不得不考虑消息将到达哪里!

主题:-关于信号器,我最喜欢的是漂亮的传输!- 关于signalr最糟糕的事情是他们有传输,因为他们认为websockets是一个操作系统功能(win8 2012服务器获取websockets)

于 2014-05-30T17:07:09.903 回答
1

在 SignalR 中,您可以订阅主题(组)并仅获取您订阅的主题的消息和全局消息。

与小组合作。

我不完全确定那段想要表达的意思。

于 2014-05-29T13:18:31.730 回答
1

当您向群组发送消息时,不在群组中的客户端不会收到消息。这是基于服务器上的 pub/sub 模型(因此当您使用组时,决定是否对消息感兴趣的不是客户端),因此在这种情况下不会发生“锤击所有客户端”。

我认为 XSockets 团队在本段中谈论的是,使用 XSockets,您可以更细粒度地控制向谁发送消息。因此,您可以发送给具有特定属性的客户端(有点像动态组),而不是发送到具有特定名称的组(您必须先创建):

但是,如果您想向距离 y 的 x km 范围内的所有客户端发送数据,会发生什么?或者,如果您只想针对 25 至 30 岁的红发男性

您必须编写自己的代码才能在 SignalR 中执行此操作。例如,这可以在将用户映射到连接的代码之上完成。一个简单的解决方案(不一定是最好的)可以使用 LINQ 根据您感兴趣的属性选择合适的用户,然后从ConnectionMapping实例中获取所有相应的连接 ID 以发送到。

于 2014-05-29T18:22:52.750 回答