(легкий) Instant Messenger: C # .Mono, node.js или другие? - PullRequest
1 голос
/ 31 мая 2011

Какой язык программирования я должен использовать для написания Instant Messenger? Вот цели:

  • должен уметь работать со многими, многими пользователями (по крайней мере, для подтверждения концепции)
  • должен основываться на json или, возможно, двоичных данных. Я думаю, что JSON легче реализовать и расширить. Я не хочу использовать XML из-за накладных расходов. Я знаю, что это не так много данных, но это должно быть как можно быстрее, особенно в медленных сетях (например, мобильных).
  • пользователи должны иметь возможность войти в систему на нескольких устройствах одновременно
  • история должна быть сохранена на сервере, чтобы ее можно было просматривать на всех устройствах
  • сервер должен поддерживать множество незанятых клиентов
  • передача файлов (не совсем уверен, как реализовать, может быть, другой сетевой сокет, чтобы он не блокировал сообщения чата на стороне клиента)
  • MySQL auth

(Нет, XMPP не вариант).

Я веб-разработчик с хорошим опытом в PHP, но это не вариант для этого проекта. У меня также есть опыт работы с Javascript (в основном для веб-сайтов), но мне было бы легко работать с node.js, и у меня мало опыта работы с C # .Net, а также я мог бы писать на C # .Mono. Сервер, который я хочу написать, должен работать в Linux. У меня нет опыта работы с Java, но если бы это был лучший способ, которым я мог бы это изучить.

Я много читал о node.js и о том, что он имеет четный ввод-вывод, действительно хорош для сетевых приложений и веб-серверов. Но как насчет мессенджеров? Основная часть заключается в том, чтобы сохранять сообщения и передавать их другим участникам комнаты, так что это «сеть».

Я также подумал о C #, который предлагает асинхронные сокеты, которые работают с пулом потоков afaik вместо очереди событий.

Я не уверен, какой из них наиболее эффективен в отношении IM-сервера.

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

Ответы [ 2 ]

5 голосов
/ 31 мая 2011

Вы можете делать все это на любом обычном языке программирования (C #, Java, C ++ и т. Д.), Если вы достаточно компетентны в этом языке.

0 голосов
/ 31 мая 2011

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

Если вы хотите что-то, что даст вам какую-то основу для более легкой работы в сети, яЯ бы порекомендовал попробовать Erlang, но это может быть сложно учиться для одного проекта.node.js может быть сложным в отношении поддержки активности / управления ресурсами на мертвых соединениях и подобных сценариях, когда вы не получаете событие.

Если вы уже знакомы с c #, использование mono может быть самым безопасным/ самая быстрая вещь для вас.Кроме того - вы можете написать что-нибудь на любом языке - просто используйте то, что вам удобно (если вы на самом деле не хотите изучать что-то новое).

Я не знаю, почему вы написали, что jabber невариант, но если вам не нужна только технология xmpp, почему бы не использовать обычный SIP-прокси / сервер?(например, OpenSIPS). У него уже есть обработка запросов MESSAGE, подписки, авторизация (с помощью db) и keepalive.Вы можете масштабировать / кластеризовать / осколять OpenSIPS практически любым способом.

...