2012-04-16 34 views
8

如果同时发生来自不同客户端的多个请求,则在执行处理程序期间Hub.Context.ConnectionId的值将发生更改。在SignalR中是Hub.Context线程安全吗?

假设我有2个客户端与客户端Ids A和B连接,并且我的Hub上有一个名为foo()的方法。我向A发送一个请求到调用foo()的服务器,然后在处理来自A的请求时,我发送一个调用foo()的请求。在A的请求Hub.Context.ConnectionId == A的处理开始时,但在方法调用Hub.Context.ConnectionId == B结束时。

我应该复制Hub.Context吗?我应该在什么时候这样做?

回答

7

它不需要线程安全,因为Hub实例不是静态的,因此您不需要复制任何内容。

它们是每次调用创建的。所以来自客户端的每个调用都会创建一个新的Hub实例和HubContext。

+0

我看到了谢谢,我从IHubActivator返回了同一个Hub,现在我已经将它改为每次都返回一个新的Hub。 – 2012-04-22 18:34:12

0

这不会直接回答你的问题,但我平常的工作流程是当他们第一次连接时在调用者上设置一个值,这可能会完成你所需要的?

Caller.clientId = Guid.NewGuid();