2012-09-28 2 views
1

В настоящее время я занимаюсь исследованиями по созданию системы чата с более чем 10k пользователями, подключенными к сети. Я наткнулся на технологии и способы сделать это, такие как jabber (XMPP), websockets, длительный опрос, push. Насколько мне известно, длительный опрос может не работать, учитывая количество пользователей. Я знаю, что есть много способов сделать это. Я также знаю, что на XMPP разработаны системы facebook и Google чатов.Разработка чата/веб-приложения в реальном времени

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

+0

Возможно, вам стоит взглянуть на серверную сторону, чтобы решить проблему C10K. Один из способов - nginx с [http push module] (http: // pushmodule.slact.net/) – ronalchn

+0

Спасибо Ronalchn! это то, что я делаю. Но со всеми выборами, это довольно сложно выбрать наиболее подходящий. Это был тот же самый процесс, который я прошел при сборке php-структуры. Там было много, но у них были такие ограничения, как масштабируемость. – paxtor

+0

Довольно близко к дубликату http://stackoverflow.com/questions/11131760/developing-a-mobile-chat-room-backend-use-xmpp-or-websocket/11142357#11142357 – Robin

ответ

2

Я использовал Socket.io вместе с NodeJS для такого приложения чата. Он масштабировался до более чем 10K одновременных пользователей на умеренных серверах, и было много возможностей для роста.

Это зависит от ваших ограничений, tho.

  • Какое оборудование вы планируете использовать?
  • Какая операционная система будет работать на ваших серверах?
  • На каких клиентских платформах вы нацеливаетесь?
  • У вас есть существующая инфраструктура, в которой вы должны вписаться?
  • У вас есть ранее выбранный язык программирования?
  • Существующий навык позволяет членам вашей команды иметь и способность вашей команды принимать новые платформы и языки, если это необходимо.

Примите во внимание все вышесказанное при принятии решения.

Лично я нашел XMPP вполне адекватным, но немного раздутым для моих целей. YMMV.

+0

Спасибо за ответ Lior! – paxtor

+0

Спасибо за ответ Lior! Я наткнулся на Socket.io и NodeJS во время моих исследований. В текущем состоянии: Язык, на котором выполняется, - PHP, целевой платформой являются браузеры, серверы, скорее всего, работают от Windows, и это новая инфраструктура. Основываясь на том, что я нашел, выбор правильной технологии для этого типа проекта имеет решающее значение. Я сделал что-то маленькое, как это раньше, только с ajax. Однако я знаю, что в этом случае это просто не сработает. Push-серверы будут вариантом, без сомнения. Исходя из этих фактов, вы по-прежнему рекомендуете Socket.io и NodeJS? – paxtor

+0

@Charlie: Я еще не пробовал nodeJS на серверах Windows, поэтому я действительно не могу прокомментировать это. Что касается вашей цели, являющейся браузерами, мне кажется, что NodeJS + Socket.io должен работать нормально для этой цели. Я действительно не пробовал бы что-либо, связанное с PHP, если вам действительно нужно масштабировать, поскольку PHP не вписывается в такую ​​архитектуру. –

1

Вы сравниваете корзину с фруктами и три разных апельсина.

XMPP - это единственный протокол, который вы упомянули, который на самом деле предназначен для поддержки чат-системы (из которой многие существуют). Другие - просто асинхронные протоколы/методы обмена сообщениями. XMPP уже поддерживает HTTP-чат через BOSH. Несомненно, он также будет поддерживать WebSockets, когда спецификация будет завершена. На самом деле есть draft из уже написанного, но на данный момент он выглядит черновиком с использованием черновика, поэтому, вероятно, будет мало, если таковые имеются, реализаций.

Использование XMPP позволит вам использовать проверенную технологию для внедрения системы чата и позволит вам выбрать, какой транспорт вы хотите использовать «под капотом». Вы на самом деле не сказали, нужен ли вам транспорт на основе http или нет, но с XMPP вы можете использовать перенос на основе сокета на базе tcp или на основе HTTP (BOSH), зная, что он также будет поддерживать WebSockets в будущем.

Другим преимуществом является, конечно же, это широко используемый стандарт, который позволит повторно использовать existing clients, servers and libraries в почти всех популярных (и не очень популярных) языках и платформах.

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

+0

Отличная информация, Робин! – paxtor

+0

Отличная информация, Робин! Как вы можете понять, я не эксперт в этой теме или подход, который необходимо принять для разработки такой системы. Однако все начинает проясняться. Основываясь на вашем ответе и исследовании, кажется, что мне нужно больше, чем просто http-сервер (например, apache) и база данных, чтобы позаботиться о чем-то подобном. Который я понимаю, потому что я попробовал что-то подобное раньше с небольшим проектом, используя apache с сервером Flash Media (протокол RTMP), чтобы обеспечить потоковое видео в реальном времени через http. Кажется, мне сейчас нужно сделать что-то похожее. Я очень ценю информацию о XMPP! – paxtor

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