Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript web场场景中的信号器连接关联_Javascript_Asp.net_Websocket_Signalr - Fatal编程技术网

Javascript web场场景中的信号器连接关联

Javascript web场场景中的信号器连接关联,javascript,asp.net,websocket,signalr,Javascript,Asp.net,Websocket,Signalr,我对我的应用程序有以下要求:在JavaScript(客户端)和服务器(ASP.NET)之间打开连接。此连接必须能够在中等时间内来回发送数据,并且在关闭之前保持状态(与REST调用不同)。也就是说,在连接期间,客户机基本上与服务器具有亲缘关系(在web场场景中) 我已经读了很多关于信号器和WebSocket的文章,但是我不知道它是否是这样运行的 我不关心web场中服务器之间的服务器->服务器通信,因为这已经用代码解决了。我只需要JS客户端和它最初接触的服务器在连接期间保持联系 它是这样工作的吗?如

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

我已经读了很多关于信号器和WebSocket的文章,但是我不知道它是否是这样运行的

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


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

请记住,尽管Signal为您透明地做了很多事情,但4种基本传输方式是完全不同的

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

解决方案是将负载平衡器用于粘性会话。这种负载平衡器将在HTTP请求中查找特定cookie,以设置特定服务器的关联性

另一种解决方案是使用信号器背板,这样您就不必在意请求的去向,背板可确保连接获得正确的消息:

每个服务器实例都通过总线连接到背板。当 消息被发送到背板,背板发送消息 到每个服务器。当服务器从背板收到消息时,它 将消息放入其本地缓存。然后服务器传递消息 从其本地缓存向客户端发送

对于每个客户端连接,客户端在读取 使用游标跟踪消息流。(一个光标代表一个 如果客户端断开连接 重新连接后,它会向总线询问在连接后到达的任何消息 客户端的游标值。当连接使用 长投票。长轮询请求完成后,客户端打开 新建连接并请求在光标之后到达的消息


谢谢你的深入回复。然而,我对“只有WebSockets和SSE是持久连接”这句话感到好奇。假设我使用WebSockets,通过负载平衡器建立的连接会在同一台机器上保持打开状态吗?如果是这样,这将解决问题。是的,WebSocket连接将保持打开状态。只需确保在关闭连接的中间没有不知道的代理和负载平衡。有些负载均衡器可以考虑连接为僵尸,因为它看起来像很长的HTTP连接。