管理中心服务器端以供集线器客户端请求

时间:2012-07-30 17:41:00

标签: signalr signalr-hub

我创建了一个非常基本的集线器,我得到IHubContext并通过一个组调用我的javascript客户端方法,所以无论有多少不同的连接,我总是可以将数据推送到同一个用户它们在上,我将一些文本传递给该文本并将该文本附加到浏览器中的多行文本框中。

一切都很好。该线程通常会运行很长的操作,通常使用集线器上下文附加文本报告操作的状态来调用客户端。

但是,我希望能够满足某人关闭浏览器然后稍后使用文本框返回页面的情况。

现在,他们只是从他们连接的操作中的点开始重新发送文本。如何从客户端向服务器发送请求以从操作开始时检索所有文本?

我的想法是拥有一个StringBuilder对象,我将每行添加到与发送到客户端中心的文本相同的位置。

然后在连接集线器时调用客户端的服务器端功能,该功能要求提供可以从StringBuilder对象ToString();

获取的全文

但是,如何在仍在执行的线程中知道从哪里获取StringBuilder对象?

OR

如果有办法将其推送到客户端,我怎么能在执行线程中知道用户已连接并将StringBuilder ToString()发送给用户?

NB。我不想重新发送每次出现的完整字符串!只有当用户刚刚连接并且需要赶上时。

我认为理解如何做到这一点将有助于理解如何处理集线器外部服务器上的signalR和状态。谢谢。

1 个答案:

答案 0 :(得分:2)

嗯,对于初学者,您应该将这些数据存储在某种持久存储中(而不仅仅是在内存中的StringBuilder中)。尽管如此,您真正需要做的是使用时间戳存储单个字符串。然后只需记住上次您看到逻辑用户并转储所有条目,因为它们首次连接到您的Hub时。

作为SignalR的旗舰测试床应用程序JabbR做了类似的事情,除了它只使用消息ID并询问自客户端收到的最后一条消息ID以来的所有消息ID。 Check out the Chat Hub's GetPreviousMessages了解详情。