gpt4 book ai didi

javascript - 网络场场景中的 SignalR 连接亲和性

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:34:04 24 4
gpt4 key购买 nike

我对我的应用程序有以下要求:在 JavaScript(客户端)和服务器(ASP.NET)之间打开一个连接。此连接必须能够在中等时间内来回发送数据并保持有状态(与 REST 调用不同)直到它关闭。也就是说,在连接期间,客户端基本上与服务器具有亲缘关系(在网络场场景中)。

我已经阅读了很多关于 SignalR 和 WebSockets 的一般信息,但我不知道它是否是这样运作的。

我不关心网络场中服务器之间的服务器->服务器通信,因为这已经用代码解决了。我只需要 JS 客户端和它最初联系的服务器在连接期间保持联系。

这是它的工作原理吗?如果不是,这可能吗?此外,如果可能的话,我如何在多个调用/广播的连接期间将信息存储在内存中?

最佳答案

请记住,尽管 SignalR 为您透明地做了很多事情,但 4 种底层传输方式却大不相同。

只有 WebSockets 和 SSE 是持久连接。 ForeverFrame 和 LongPolling 是重复的 HTTP 请求,因此如果您有多个服务器以循环方式进行负载平衡,则您无法控制每个调用的去向。

一种解决方案是使用具有粘性 session 的负载平衡器。这种负载均衡器会在 HTTP 请求中寻找特定的 cookie 来为特定服务器设置关联。

其他解决方案是使用 SignalR 背板,因此您不必介意请求的去向,背板可确保连接获得正确的消息:

http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-in-signalr

Each server instance connects to the backplane through the bus. When a message is sent, it goes to the backplane, and the backplane sends it to every server. When a server gets a message from the backplane, it puts the message in its local cache. The server then delivers messages to clients from its local cache.

For each client connection, the client’s progress in reading the message stream is tracked using a cursor. (A cursor represents a position in the message stream.) If a client disconnects and then reconnects, it asks the bus for any messages that arrived after the client’s cursor value. The same thing happens when a connection uses long polling. After a long poll request completes, the client opens a new connection and asks for messages that arrived after the cursor.

关于javascript - 网络场场景中的 SignalR 连接亲和性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21894577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com