Написание чата
Мне интересно, как правильно закодировать приложение чата для тысяч пользователей.
Я просто смущен, как я смогу выполнить ping-сервер с помощью AJAX каждую секунду или, может быть, меньше, и проверить, есть ли новые записи в MySQL и т.д. с допустимой нагрузкой на сервер.
В настоящее время я думаю о кодировании с помощью jQuery, PHP и MySQL.
Прошу совета. Ваша помощь будет принята с благодарностью.
Ответы
Ответ 1
Клиентская сторона
Для любой программы, которая должна опросить сервер, я бы рекомендовал WebSockets.
Я написал чрезвычайно простой учебник по WebSocket. Я также использовал код web-socket-js для реализации FlashSocket, который заставит его работать через Firefox, IE 8+ и Chrome, а также любой браузер, поддерживающий WebSockets.
Я не считаю, что опрос был бы хорошим выбором для чат-приложения. Хотя это сработает, служебные данные запроса будут намного выше, чем использование WebSocket. Компромисс (преимущество) заключается в том, что его поддерживает больше браузеров.
Кроме того, попадание базы данных MySQL, чтобы увидеть, есть ли сообщения, будет нести накладные расходы БД. Я бы рекомендовал использовать базу данных MySQL для журналов чата и поддерживать только небольшое количество "обратных" сообщений для новых подключений. Затем просто передавайте новые сообщения всем подключенным клиентам. Приложение frontend затем примет сообщение и добавит его в окно чата.
Сторона сервера
Node.js - это условная серверная среда JavaScript на стороне сервера. Пока он еще молод, в нем закодировано несколько очень интересных приложений. Пользователи Node.js настраивают чат-программу (а не WebSockets), источник которой . Это было бы очень хорошим местом для начала, если вы не захотели написать его с нуля.
Существует реализация PHP WebSocket. В зависимости от ваших требований его можно использовать просто отлично. Зашифровав как в Node.js, так и в PHP, я бы сказал, что Node.js лучше подходит для этого.
Ответ 2
На стороне сервера вам понадобится script, который может определить, есть ли новый контент (например: сообщения) на основе метки времени (например: последний запрос). На стороне клиента у вас есть два варианта:
Опрос aka Периодическое обновление:
В основном это означает, что ваш клиент опросил сервер через интервалы времени, чтобы проверить, есть ли новые данные. Вы хотите, чтобы ваши запросы и ответы были максимально легкими. Это также может помочь, если запустить script обработку этих запросов в отдельном процессе.
Вам будет нужно настроить интервал на тот, который подходит как для сервера, так и для пользователя. Вы также можете использовать Heartbeat, чтобы указать, активен или нет пользователь, поэтому вы можете остановить опрос сервера, если пользователь оставил окно открыто, но отключено от компьютера.
HTTP Streaming aka "Comet" :
Для этого потребуется еще одна настройка; но это в основном долговременное соединение от клиента к серверу, и сервер при необходимости может "нажимать" содержимое клиенту.
Ответ 3
Вот пример простого вида websockets: http://www.dashdashverbose.com/2010/02/nodejs-websockets-stoopid-easy-comet.html
Я предполагаю, что ваше максимальное количество пользователей будет зависеть в основном от вашего соединения и программного обеспечения сервера.
Ответ 4
Вы также можете попробовать IcePush - это ajax-структура для push-сообщений от сервера к клиенту javascript. Это было бы идеальным сочетанием для chatclient!
Ответ 5
Если вы являетесь разработчиком java, вы можете использовать jwebsocket для реализации сервера. на их сайте есть разные примеры, так как я также переживаю некоторые из них.
Кратко со своего веб-сайта
jWebSocket предоставляется вам для создания инновационных потоковых и коммуникационных приложений на базе HTML5 в Интернете. HTML5 WebSockets заменит существующие подходы XHR, а также сервисы Comet новой гибкой и сверхвысокой двунаправленной технологией связи сокетов TCP. jWebSocket - это реализация Java и JavaScript с открытым исходным кодом для протокола HTML5 WebSocket с огромным набором расширений.