1

目前我正在使用 SignalR 在我们的应用程序中提供聊天功能。但我使用 Openfire XMPP 服务器作为聊天后端。因此 SignalR 集线器在 OnConnected 事件中创建 XMPP 连接;此连接在 OnDisconnected 事件中关闭。

更重要的是,XMPP 连接公开了一些事件,例如 OnAuthenticated、OnRosterStart、OnRosterEnd、OnMessage 等。集线器处理这些事件并调用适当的客户端 JS 方法。

这不是一个单页应用程序,因此用户将在页面之间导航;因此,为每个页面重新创建 XMPP 连接并不是一个好主意。此外,如果发送者在 SignalR 连接终止且尚未在接收者登陆的新页面中初始化时发送了一条消息,我们也会遇到用户丢失消息的极端情况!

所以我想在会话级别管理 XMPP 连接生命周期;即在 Session_Start/login 中创建 XMPP 连接;在 Session_End/logout 中处理连接。这部分非常简单;但棘手的部分是如何将 XMPP 连接存储在会话中,并在负载均衡器后面有多个 Web 服务器时让它可靠地触发事件。

我理解 ASP.NET 提供的任何持久性机制(例如会话、缓存、应用程序变量等)的方式都是关于序列化/反序列化数据。但在这种情况下,我要存储的对象有需要处理的事件。

所以主要的问题是,有没有解决方案呢?

谢谢

4

0 回答 0