2011-10-19 4 views
1

Я пытаюсь реализовать пользовательскую программу чата в Интернете, но я не уверен, как обрабатывать обновления в реальном времени (или почти в режиме реального времени) для пользователей. Будет ли смысл отправлять запросы Ajax со стороны клиента каждую секунду или около того, опросив базу данных для новых комментариев?Является ли опрос способ пойти в чате в Интернете?

Есть ли способ как-то транслировать из базы данных каждый раз, когда добавляется комментарий? Если это возможно, как это будет работать? Я использую Sql Server 2008 с Asp.net (C#).

Спасибо!

+3

Yarrr matey! Это [длинный опрос] (http://stackoverflow.com/questions/tagged/long-polling), который вы ищете, чтобы вы стреляли собаками. –

+0

@ChrisShouts: Ах, так это называется длинным опросом. Узнал что-то сегодня. –

+0

Возможный дубликат [Внедрение комет для ASP.NET ?](http://stackoverflow.com/questions/65673/comet-implementation-for-asp-net) – RedFilter

ответ

2

Использование длинного опроса/на стороне сервера толчок/кометы:

http://en.wikipedia.org/wiki/Comet_(programming))

Также см: http://en.wikipedia.org/wiki/Push_technology

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

0

Nope. использовать системы массового обслуживания, такие как RabiitMq или ActiveMQ. Также проверьте mongoDB.

Система массового обслуживания даст вам возможность опубликовать - подписаться.

+0

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

+0

u можете сделать это с помощью даже javascript, если хотите. В ActiveMQ есть библиотека javascript. –

2

Возможно, каждый клиент опросит сервер, а на стороне сервера держит соединение открытым без ответа.

Как только на стороне сервера обнаружено сообщение, эти данные возвращаются через уже открытое соединение. При получении ваш клиент немедленно выдает новый запрос.

Существует некоторая сложность, так как вам необходимо удержать сторону сервера следа, с которой связаны соединения, с каким сеансом и на что следует реагировать, чтобы предотвратить таймауты.

Я никогда не делал этого, но это должно быть самым ресурсоэффективным способом.