На каком языке удобней писать websocket сервер?

Добрый день.
Стоит задача сделать web-приложение (на сайт). Если в общем, то что-то вроде тикет системы на стероидах с рядом особенностей. Приложение пишется для себя и своей команды разработчиков, поэтому особо сильной нагрузки не планируется.

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

Связь клиент-сервер через веб сокеты. Стандартный rest не подходит т.к. бОльшая часть всех действий происходит по инициативе сервера. На данный момент планируется только веб морда, но в дальнейшем нужна возможность к этому api прикрутить мобильное приложение.

Думаю не понадобиться fullstack фреймвок тип django, ror. Достаточно будет собрать несколько либ, чтобы не перегружать приложение: orm, роутинг, кеш. От последнего в случае scala/erlang можно вообще отказаться, а держать данные в памяти средсвами самого языка. Хотя если будет что-то легковесное, подходящее под требования, то можно воспользоваться.

База данных реляционная.

Сам я специализируюсь на php и о других языках знаю только в теории. Но опыт разработки позволяет сесть за новый язык и начать писать.

Для фронтенда выбрал angular - двухсторонний биндинг очень одобная штука, как по мне.

Но с серверным языком я несколько сомневаюсь. Писать демона на php можно, но лучше я возьму язык, у которого долгоживущие процессы являются частью его модели.

На данные момент я вижу такие варианты:
1. scala + akka. Акторная модель хорошо подходит под задачу. Плюс JVM позволяет запускать сервер на любой оси.
2. python.
3. Можно упороться и сделать на Erlang. Акторы. Виртуальная машина. Отсутствие тяжелых вычислений позволяет не бояться просадок производительности.
4. Go. Слышал краем уха. При беглом просмотре понравилась удобная многопоточность. Но что у него с экосистемой, я не знаю.

Nodejs подходит, но отказался сразу ибо терпеть не могу js. И если на клиенте это неизбежное зло (про typescript, coffescript и т.п. знаю), то на сервере можно избежать поедания кактусов.
Rust тоже имеет акторную модель, но, как по мне, черезчур сложный для этой задачи.

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

Я занимался разработкой rest серверов, а с реалтайм системами не работал и потому могу не до конца знать все подводные камни. У кого есть опыт в разработке таких систем, посоветуйте, какой язык будет удобней и быстрей для разработки сервера?

UPD: Всем спасибо за участие!
Решил писать на PHP, а для сокетов перед ним поставить центрифугу. Потому что:
1. PHP очень распространен. Т.к. код будет открытым, не хочеться создавать другим проблемы при допиливании под себя. Чем распространенней язык, тем проще другим будет использовать приложение.
2. Т.к. ображение к приложению остаеться по стандартной rest схеме, не придеться отдельно писать API. Центрифуга может обращаться к стандартному API приложения, к которому так же и другие приложения могут вязаться.
  • Вопрос задан
  • 6636 просмотров
Решения вопроса 2
index0h
@index0h
PHP, Golang. https://github.com/index0h
Вообще говоря быстрее/удобней таки на nodejs.

Если ваша цель - получить проект, который вы хотите быстро - пишите бизнес логику на PHP, для websockets юзайте habrahabr.ru/company/mailru/blog/266017/.

Можно линк на ваш проект?
Ответ написан
sim3x
@sim3x
Для фронтенда выбрал angular - двухсторонний биндинг очень одобная штука, как по мне.
вопрос в другом, если у тебя большой поток, то как себя поведет ангуляр тебе могут сказать только гуру. Не спеши привязывать себя к фреймворку - лучше сделай прототип и посмотри как он работает в твоей схеме. Желательно сразу на второй версии или хотя б с использованием ES2015
Задумка Ангуляра в том, что он позволял верстальщикам делать интерактивность просто.

3. Можно упороться и сделать на Erlang
whatsUp не упоролся, а просто сделал и держит фб. Главное, что платформа берет на себя много вопросов по обслуживанию кода на множестве нод. И что твой код не уронит всю платформу при апдейте
Насколько я понимаю у го такой платформы нет
Ответ написан
Пригласить эксперта
Ответы на вопрос 7
TheCreator
@TheCreator
Бездельник
Nodejs подходит, но отказался сразу ибо терпеть не могу js.

А вы научитесь его правильно готовить, он очень вкусный, как раз именно для "реактивного" веб-приложения, асинхронность (которая вам, наверное, и не по нраву) даёт возможность работать сверхбыстро.
Ответ написан
mag2000
@mag2000
Erlang
Раз уж я услышал упороться… :-)
Другими словами, раз есть свободное время, зачем его тратить в пустоту. Давай посмотрим с другой стороны: PHP – говно, а JS – ок. Норм? :-)
Но над твоей системой и упарываться не надо. Максимализм? Кэши тебе подавай, Go, Scala?
Твоё приложение – это ивент машина пытающаяся поговорить с человеком через браузер :-)
n2o – просто почитай ридми и ты всё сам поймешь. И никаких JS фреймворков которые пытаются в данные, будешь писать SPA и отсылать DOM по WS с сервера как ты и хотел, в любое время, из одного микропроцессика обслуживающего пользователя.
И так же как JVM - на любой тачке, более того: компиляция на лету с горячим обновлением без потери соединений. noSQL из коробки, да ещё и распределенная. Выполнение кода на другой машине через TCP…
Да, большинство фишек для тебя просто избыточны, но они есть, изкаропки. Ты же о экосистеме говорил? Вот она.
Коллегам поиграться будешь давать в виде Юникернел-бандла который сам еще и рекомпиляться умеет.

Осталось выучить на этом проекте Эрланг за 10 дней и всё. Он же понятнее PHP в 10 раз. Энжой ))
Ответ написан
@sergeystepanov1988
Nodejs подходит, но отказался сразу ибо терпеть не могу js.

Go. Слышал краем уха. При беглом просмотре понравилась удобная многопоточность. Но что у него с экосистемой, я не знаю.

Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует.

Бьерн Страуструп.
Ответ написан
MpaK999
@MpaK999
Буду!
Ничего не мешает на CoffeeScript под Node.js - потому лучше возьмите, то что знаете - быстрее напишите. А взлетит проект перепишите уже на чем-нибудь серьезном как Erlang, Go, Scala.
А не взлетит - ну и ладно, зато не убили кучу времени и не потеряли проект.
Ответ написан
Комментировать
@potan
Функциональный программист
Scala и Play Framework вполне подходят. Когда потребовались web-сокеты, мне их удалось прекрутить без труда.
Правда, сама Scala - не самый простой язык, может потребоваться некоторое время, что бы с ним разобраться.
Ответ написан
Комментировать
@Levhav
Возьмусь за разработку проектов любой сложности.
Если хотите реализовать как можно быстрее можете попробовать saas сервис для работы с websocket вместо написания своего сервиса. К примеру вот https://comet-server.ru/
Тогда остальную часть можно писать на php и у результирующего приложения будут низкие требования к хостингу так как работа с websocket будет выполнятся не на ваших серверах и не будет нагружать вашу инфраструктуру.
Ответ написан
@UA3MQJ
А мне близки Erlang и по работе применяю AngularJS. Поэтому n2o не сильно заинтересовал. Надо изучать. А ангуляр я уже знаю более менее. Недавно я тоже задался вопросом создания вебсокет сервера, и остановился на YAWS (ковбой тоже поддерживает, но на винде не собрался). На винде YAWS запустился нормально. Причем, я смог запустить его и как встроенный сервер в свое Erlang приложение. По сути дела всё то же самое, как и в случае с обычным сервером и ангуляром, только тут устанавливаем соединение не с rest а с ws. На стороне сервера YAWS нормально отдает странички, а в случае перехода на WS вызывает написанный на ерланге коллбек. Все прозрачно, понятно. Разобрался за час.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы