aut*_*ton 3 javascript asp.net websocket signalr
我对我的应用程序有以下要求:在JavaScript(客户端)和服务器(ASP.NET)之间打开连接.此连接必须能够在中等时间内来回发送数据并保持有状态(与REST调用不同),直到它关闭.也就是说,对于连接的持续时间,客户端基本上具有与服务器的亲和性(在web场方案中).
我已经阅读了很多关于SignalR和WebSockets的内容,但我无法弄清楚这是不是它的运作方式.
我不关心web-farm中服务器之间的服务器 - >服务器通信,因为这已经通过代码解决了.我只需要JS客户端和它最初联系的服务器在连接期间保持联系.
它是如何工作的,如果没有,这可能吗?此外,如果可能,如何在多个呼叫/广播的连接期间将信息存储在内存中?
请记住,尽管SignalR为您提供了许多透明的东西,但4种底层传输却截然不同.
只有WebSockets和SSE是持久连接.ForeverFrame和LongPolling是重复的HTTP请求,因此如果您有多个服务器以循环方式进行负载平衡,则无法控制每次调用的位置.
解决方案是使用具有粘性会话的负载均衡器.这种负载均衡器将在HTTP请求中查找特定的cookie,以便为特定服务器设置关联.
其他解决方案是使用SignalR背板,因此您不介意请求的位置,背板可确保连接获得正确的消息:
http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-in-signalr
每个服务器实例通过总线连接到背板.发送消息时,它会进入背板,背板将其发送到每个服务器.当服务器从背板获取消息时,它会将消息放入其本地缓存中.然后,服务器从其本地缓存向客户端传递消息.
对于每个客户端连接,使用游标跟踪客户端读取消息流的进度.(游标表示消息流中的位置.)如果客户端断开然后重新连接,它会向总线请求在客户端的游标值之后到达的任何消息.当连接使用长轮询时会发生同样的事情.在长轮询请求完成后,客户端将打开一个新连接,并询问在光标之后到达的消息.
| 归档时间: |
|
| 查看次数: |
2200 次 |
| 最近记录: |