ASP.NET -Комета толкает сообщения от сервера ко всем клиентам
Я создаю приложение с переменными на стороне сервера, которые меняются каждую секунду. Каждую секунду эти новые переменные должны показываться на всех клиентах, у которых открыта веб-страница.
Теперь большинство людей сказали мне идти с кометой, потому что мне нужно толкать/вытягивать данные каждую секунду, теперь у меня есть несколько вопросов:
-
Что было бы лучшим решением, учитывая тот факт, что мне нужны новые данные каждую секунду, вытягивая из клиента или толкая с помощью сервер?
-
Также идентификатор элемента, которые находятся на стороне сервера (с переменной, что ID есть) может изменить и когда клиент обновляет страницу, он должен получить старый (и жизни) личности. Это будет означать, что моя библиотека jQuery/JavaScript на стороне клиента необходимо знать, какой идентификатор у него на странице, что лучший способ сделать это?
-
Последнее, что я не могу найти хорошую (не слишком дорогую) библиотеку comet / api для asp.net (C#). Кто-нибудь когда-нибудь пользовался библиотекой комет с хорошей результаты? Мы смотрим на сайт, который должен быть в состоянии иметь 2000 кометных соединений в каждый момент.
3 ответа:
Что было бы лучшим решением глядя на тот факт, что мне нужно новые данные каждую секунду, вытягивая из клиент или толкающий сервер?
Я не думаю, что это не имеет большого значения, так как время между запросами и временем, когда будут доступны новые данные, довольно короткое. Я бы просто создал экземпляр нового XMLHttpRequest на клиенте после того, как предыдущий был успешно выполнен. Вы можете отправить серверу последние полученные данные (если они не слишком велики), чтобы он мог сравнить эти данные с текущей доступной на сервере и только отправить что-то обратно, когда новые данные доступны.
Также идентификаторы элементов, которые находятся на серверная сторона (с переменной это ID got) может меняться и тогда, когда клиент обновляет страницу, которая ему нужна, чтобы получить самые старые (и живые) удостоверения личности. имею в виду, что мой jquery / javascript на клиентская сторона должна знать, какой он ID попал на страницу, как лучше всего это сделать сделать это?
Я не совсем уверен, что понимаю. что вы имеете в виду, но если я прав, вы можете просто хранить каждую пару имя/значение в объекте. Когда новая переменная поступает в клиент, она не перезаписывает существующие данные; когда определенная переменная уже присутствует, она обновляется с последним значением. Это может выглядеть так:
{ first_variable: 345, second_one: "foo", and_the_third: ["I", "am", "an", "array,", "hooray!"] }
И когда появляется новое состояние
second_one
, например"bar"
, Объект обновляется до:{ first_variable: 345, second_one: "bar", and_the_third: ["I", "am", "an", "array,", "hooray!"] }
Последнее, что я не могу найти хорошего (не дорого) comet library / api ибо asp.net (C#). Кто-нибудь использовал а библиотека комет с хорошими результатами?
У меня нет никакого опыта работы с ASP.NET - но нужна ли вам для этого такая библиотека? Разве вы не можете сами запрограммировать серверный код, который, как я уже сказал, оставляет соединение открытым и периодически (непрерывно) сравнивает текущее состояние с предыдущим отправленным состоянием?
Обновление: чтобы показать, что не так уж сложно поддерживать соединение открытым на стороне сервера, я покажу вам симуляцию длительного опроса. написал на PHP:
<?php sleep(5); ?> <b>OK!</b>
Вместо того, чтобы позволить процессу
sleep
несколько секунд, вы можете легко проверить изменения состояния в цикле. И вместо того, чтобы отправлять произвольный HTML-элемент, вы можете отправить данные обратно, например, в нотации JSON. Я не могу себе представить, что было бы так трудно сделать это в ASP.NET/C#.
Существует функция SendToAll в PokeIn ASP.NET библиотека ajax.
WebSync by Frozen Mountain-это полноценный масштабируемый сервер comet для IIS и ASP.NET он легко интегрируется в стек приложений для поддержки обмена данными в режиме реального времени с тысячами клиентов на каждом узле сервера.
Проверьте это, есть издание сообщества в свободном доступе.