有没有办法在SignalR持久连接中保留消息顺序?

时间:2013-07-19 02:33:54

标签: asp.net signalr persistent-connection

情况是ASP.NET MVC4项目中SignalR(来自NuGet的v1.1.2)持久连接的单个javascript客户端。连接后,我会从客户端到服务器连续发送多条消息。在服务器上,我的OnReceived覆盖函数同时从多个线程调用,导致消息无序接收,因为它变成了一个竞赛,看看哪个首先击中我的锁。从服务器发送到客户端的消息似乎是按顺序传递的,虽然这可能只是运气。

对于单个客户,是否有任何方向的消息顺序预期?是否有任何我缺少的文档列出了持久连接所做的保证?

我是否需要做一些特别的事情来确保服务器到客户端的消息也按顺序保存?我的大多数发送来自持久连接之外的异步,因此我当前只是调用IConnection.Send并忽略返回的Task。

1 个答案:

答案 0 :(得分:3)

快速回答是否定的。当您从服务器向客户端发送消息时,事情将始终有序。但是,从客户端发送到服务器,将传出客户端排队到服务器调用的唯一传输是websockets。

持久连接在尝试从客户端向服务器发送订单时运气不佳,因为无法知道发送何时完成。另一方面,集线器返回延迟(和C#中的任务),这使您可以在发送之前等待发送完成。