Как мне создать сервер чата, который не управляется путем опроса?

StackOverflow https://stackoverflow.com/questions/1173032

Вопрос

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

Поскольку клиент работает на мобильной платформе (iPhone), я искал способы избавиться от опроса, который быстро разряжает батарею.Я читал, что можно поддерживать http-соединение открытым бесконечно, но не понял, как использовать этот метод на практике.Мне также интересно, достаточно ли стабильны такие соединения для использования в мобильных условиях.

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

Целесообразно ли пытаться выполнить это через http, или мне придется написать свой собственный протокол через tcp?Насколько сложно было бы настроить xmpp в соответствии с моими потребностями (мой чат-сервер имеет некоторые специализированные функции, которые мне пришлось бы легко реализовать).

Это было полезно?

Решение

Как насчет технологии push?видишь http://en.wikipedia.org/wiki/Comet_ (программирование)

Другие советы

Я думаю, вы описываете XMPP вместо ЧУШИ.

http://xmpp.org/extensions/xep-0206.html

Я использовал этот метод http-привязки между сервером чата и javascript-клиентом на немобильных устройствах.У меня это хорошо сработало.

Возможно, вы захотите проверить этот проект который использует различные методы, включая Comet. Подробности выпуска находятся здесь, вот фрагмент с этой страницы

Мне очень приятно иметь возможность объявить о первом публичном показе проекта, над которым я работал в свободное время в течение последнего месяца или двух, нового веб-IRC-чата приложение.

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

Некоторые из базовых инструментов созданы для того, чтобы сделать это возможным, что я считаю ’достаточно стабильным’, уже выпущены, такие как библиотека демонов php - сокетов я написал, чтобы иметь возможность иметь дело с сотнями, вплоть до многих тысяч http-подключений “Comet” и равным количеством клиентских подключений IRC.

Я только что нашел эта статья я сам, который описывает следующую технику (на которую я ссылался в вопросе):

...попросите клиента сделать HTTP-запрос и попросите сервер удерживать запрос в очереди до тех пор, пока не появится сообщение для отправки.если TCP/IP-соединения является потеряли или раз-заказчик сделать новый HTTP-запрос, и задержки только время приема на пары запроса/ответа ...эта модель эффективно требует двух TCP / IP подключений по протоколу HTTP, от клиента к серверу, хотя ни одно из них не является постоянным и следовательно, удобным для мобильных устройств

Я думаю, что это почти невозможно и опасно.Интернет работает без состояния и установления соединения, что означает, что соединение между клиентом и сервером всегда обрабатывается как ненадежное.И это не для развлечения.

Пытаясь получить соединение с отслеживанием состояния, вы создаете новые проблемы.Особенно из приложения 3g.Что, если соединение оборвется?У вас нет контроля над сервером, и вы не можете выполнить push.

Я думаю, было бы даже проще отправлять sms / текстовые сообщения и иметь приложение, которое справляется с этим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top