Задать вопрос

На каком языке удобней писать 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 приложения, к которому так же и другие приложения могут вязаться.
  • Вопрос задан
  • 6682 просмотра
Подписаться 6 Оценить Комментировать
Решения вопроса 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 вызывает написанный на ерланге коллбек. Все прозрачно, понятно. Разобрался за час.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы