1

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

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

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

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

我的想法是有一个StringBuilder对象,我将每一行与我发送到客户端集线器的文本相同。

然后在连接集线器时,从客户端调用服务器端函数,该函数请求可以从StringBuilder对象中获取的全文ToString();

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

或者

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

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

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

4

1 回答 1

2

好吧,对于初学者来说,您可能应该将这些数据存储在某种持久性存储中(而不仅仅是在内存中的 StringBuilder 中)。尽管如此,您真正需要做的是存储带有时间戳的单个字符串。然后只需记住您最后一次看到逻辑用户并转储自他们首次连接到您的集线器时的所有条目。

JabbR 是 SignalR 的旗舰测试床应用程序,它执行类似的操作,只是它使用消息 ID 并询问自客户端收到的最后一个消息 ID 以来的所有消息 ID。查看聊天中心的 GetPreviousMessages了解详情。

于 2012-07-30T22:19:54.843 回答