Параллельные языки программы для чата и приложений в стиле Twitter - PullRequest
3 голосов
/ 12 марта 2010

Мне нужно создать простую систему чата, такую ​​как чат в Facebook и приложение, похожее на твиттер. Каковы лучшие языки параллельной программы в этом случае?

Эрланг, Хаскель, Скала или еще что-нибудь?

Спасибо ^ _ ^

Ответы [ 8 ]

6 голосов
/ 12 марта 2010

Чат-система, например чат в Facebook

Фейсбук-чат написан на Erlang, http://www.facebook.com/note.php?note_id=14218138919

и твиттероподобное приложение

Какой аспект? Доставка сообщений? Веб-интерфейс? В конечном итоге это все сообщения. Haskell недавно использовался для нескольких систем торговли в реальном времени, использующих многоядерный параллелизм. http://www.starling -software.com / misc / icfp-2009-cjs.pdf

Более актуально: каковы масштабы: сколько пользователей вы ожидаете обслуживать одновременно?

4 голосов
/ 12 марта 2010

Полное приложение для чата исходный код с использованием Scala / Lift.

8 минут и 20 секунд в режиме реального времени, неотредактированные, веб-трансляция создание приложения чата с нуля с использованием Scala / Lift.

4 голосов
/ 12 марта 2010

Эрланг - мой выбор препарата для чего-то подобного. Но я также проверил бы Node.js, если вам удобнее в JavaScript.

2 голосов
/ 13 марта 2010

Я бы рекомендовал взглянуть на Акку ( www.akkasource.org )

Это среда Scala Actor с ОДНОМ каналом для создания масштабируемых серверных приложений.

Из коробки он поддерживает:

Актерский надзор Удаленные актеры Членство в кластере Комета над JAX-RS (проектная атмосфера) HTTP-аутентификация для ваших сервисов Поддержка распределенного хранилища (Cassandra, MongoDB) + намного больше

2 голосов
/ 12 марта 2010
2 голосов
/ 12 марта 2010

На самом деле это относительно простая задача, которую можно решить любым языком с поддержкой приличного потока, включая (например, Java, C # и другие). Модель довольно проста:

  1. Каждый клиент подключается к веб-серверу с помощью запроса AJAX, который настроен на сервере не для тайм-аута;
  2. Если по какой-либо причине время ожидания истекло, клиент настроен на выдачу другого запроса AJAX;
  3. Конечная точка сервера для этого вызова AJSX выполняет операцию ожидания потока на каком-то мониторе в ожидании обновлений;
  4. Когда пользователь отправляет чат, он отправляется на сервер и сигнализируются любые соответствующие мониторы;
  5. Все потоки, прослушивающие этот монитор, просыпаются, получают любые сообщения, ожидающие их, и возвращают их как результат AJAX клиенту;
  6. Клиент обрабатывает эти сообщения, а затем отправляет другой AJAX-запрос для прослушивания сообщений.

Это базовая структура, но это не конец истории. Любая масштабируемая система чата будет поддерживать либо внутреннюю, либо внешнюю федерацию (то есть клиенты могут подключаться к нескольким серверам), но если вы не являетесь Google, Facebook или Twitter, у вас вряд ли возникнет эта проблема.

Если вам нужна какая-то очередь сообщений / шина для межсерверной связи.

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

1 голос
/ 12 марта 2010

Если на самом деле это будет простое приложение (и не под очень высокой нагрузкой), тогда ответом будет использование любого языка, который вы уже знаете, который имеет достойную многопоточность. Erlang, Scala, Clojure, Haskell, F # и т. Д., Все отлично справляются с такими вещами, как и Java, и C #. Все будет хорошо, если вы выберете то, что вам известно и / или нравится.

Если вы используете это в качестве предлога для изучения нового, вообще полезного языка, я бы выбрал Scala как отличную смесь с высокой производительностью (которой Эрланг не является в целом, хотя это фантастически с эффективным параллелизмом) функциональные (которые не являются Java и C #), легко развертываемые (благодаря работе на JVM) и достаточно знакомые (если вы знаете языки C-ish).

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

1 голос
/ 12 марта 2010

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

Используйте такую ​​среду, как азот, где вы можете запускать кометные запросы так же легко, как Jquery делает ajax.

...