1

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

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

我是否需要做任何特别的事情来确保服务器到客户端的消息也保持有序?我的大部分发送都是从持久连接外部异步发送的,所以我目前只是调用 IConnection.Send 并忽略返回的任务。

4

1 回答 1

3

快速回答是否定的。当您从服务器向客户端发送消息时,一切都会井然有序。然而,从客户端发送到服务器,将传出客户端排队到服务器调用的唯一传输是 websockets。

使用持久连接时,您在尝试订购从客户端到服务器的发送时会很不走运,因为无法知道发送何时完成。另一方面,集线器返回一个延迟的(和 C# 中的任务),它允许您在再次发送之前等待发送完成。

于 2013-07-19T04:29:57.563 回答