2013-07-19 2 views
0

Ситуация - это один клиент javascript на постоянном соединении SignalR (v1.1.2 от NuGet) в проекте ASP.NET MVC4. После подключения я отправляю несколько сообщений в строке от клиента к серверу. На сервере моя функция переопределения OnReceived вызывается из нескольких потоков одновременно, что приводит к тому, что сообщения принимаются не по порядку, так как они становятся гонкой, чтобы увидеть, какой из них сначала попадает в мой замок. Сообщения, отправленные с сервера на клиент, отображаются в порядке, хотя это может быть просто удачей.Есть ли способ сохранить порядок сообщений в постоянном соединении SignalR?

Есть ли какое-либо ожидание заказа сообщения в любом направлении для отдельного клиента? Есть ли какая-либо документация, которую мне не хватает, в которой перечислены гарантии, сделанные постоянным соединением?

Нужно ли мне что-либо делать, чтобы сообщения сервера и клиента поддерживались в порядке? Большинство моих отправлений поступают асинхронно из-за постоянного соединения, поэтому я в настоящее время просто вызываю IConnection.Send и игнорируя возвращенную задачу.

ответ

3

Быстрый ответ: нет. Когда вы отправляете сообщения от сервера к клиенту, все будет в порядке. Тем не менее, отправка от клиента на сервер, единственный транспорт, который ставит очередь исходящих клиентов на серверные вызовы, - это веб-узлы.

С постоянными подключениями вам не повезло при попытке заказать отправку от клиента к серверу, так как нет способа узнать, когда передача будет завершена. С другой стороны, концентраторы возвращают отложенную (и задачу на C#), которая позволяет дождаться завершения отправки перед отправкой.

+0

Вы имели в виду «клиент к серверу» во втором абзаце? – Screndib

+0

Yep отредактировал ответ. – davidfowl

+0

Вы уверены, что порядок сообщений сохраняется при отправке сообщений с сервера на клиент? См. [Link] (https://github.com/SignalR/SignalR/issues/3310) –

Смежные вопросы