• На чем разрабатывать realtime web-приложения?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Если вы java dev - на кой чорт вам nodejs сдался? Фронт на js придется писать, тут безвыходь, но бэк..
    Как вариант можете посмотреть в сторону centrifugo.
    Ответ написан
    Комментировать
  • Что нужно для оповещения пользователей RealTime?

    chelkaz
    @chelkaz Автор вопроса
    Идеально без сторонних сервисов - https://opensource.mail.ru/Centrifugo
    Ответ написан
    Комментировать
  • Как запустить Centrifugal?

    ну вам виднее, что за копия центрифуги вертится у вас на сервере. можете убить ее, можете на другом порту запускать (ну и учитывать это позже в приложении и при настройке nginx, естественно), плюс непонятно, корректный ли конфиг вы подключаете, указанный в команде запуска она найти не может и берет из другого совершенно места
    Ответ написан
  • Каждую секунду запрос от миллиона пользователей. Как лучше?

    Sanasol
    @Sanasol Куратор тега Веб-разработка
    нельзя просто так взять и загуглить ошибку
    оно тоже должно каждую секунду обращаться к серверу.

    это сервер рассылает сообщения, а не клиенты сервер спрашивают.

    И используют для этого websocket.

    Самый неплохой из готовых вариантов https://github.com/centrifugal/centrifugo
    Ответ написан
    Комментировать
  • Порекомендуйте язык/фреймфорк/технологию для websocket-сервера?

    @jacob1237
    Асинхронная модель обработки сетевых соединений можно сказать что единственно верная для данной задачи.
    Корень зла здесь - так называемая "проблема C10k", то есть "проблема 10 тысяч соединений": https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D...
    При построении чатов эта проблема стоит особенно остро, т.к. если у Вас, например, 2000 онлайн пользователей, то и соединений с ними тоже 2000, которые необходимо поддерживать в активном состоянии в режиме реального времени.
    Именно в таких случаях асинхронная модель выигрывает, потому что на каждое соединение получается очень небольшой оверхед по памяти, в отличие например от модели когда на каждое соединение создается системный поток - thread.

    Теперь про возможные технологии. Написать чат на вебсокетах возможно много на чем.
    Фаворитами по скорости программирования здесь будут, ИМХО, JavaScript (Node.js) и Python. По скорости же работы - Go, Erlang и прочие компилируемые языки.

    Python:
    1. Twisted + sockjs-twisted
    2. Tornado + sockjs-tornado (уже приводили здесь)
    3. Crossbar.io (http://crossbar.io/) - комплексное решение, которое позволит сконцентрироваться на логике приложения, а не на технических вопросах.
    4. Разные вариации библиотек (Authobahn.io, asyncio etc.)

    JavaScript (Node.js):
    1. Socket.io (socket.io/) - достаточно известное решение, комплексное, позволяет не думать о технической части
    2. SockJS (https://github.com/sockjs/sockjs-node) - больше библиотека чем фреймворк. Например мультиплексирование (несколько "виртуальных" соединений внутри одного сокета) придется пилить вручную (правда есть библиотеки)

    Хочется отметить, что вне зависимости от использования Socket.io или SockJS, настанет момент, когда Вы захотите использовать все ядра своего процессора для обработки пользовательских соединений (по одному запущенному процессу на ядро). И вот тут на Python придется вручную писать логику построения кластера из нескольких процессов.
    В Node.js эту проблему решает модуль "Cluster" (https://nodejs.org/api/cluster.html).
    В принципе на Python тоже можно быстро написать этот функционал (например на Twisted), но осадочек, как говорится, остался)

    По поводу скорости - JavaScript (Node.js) априори будет быстрее чем Python, т.к. там JIT компиляция.
    Уравновесить ситуацию поможет PyPy - нестандартный интерпретатор Python, который тоже использует JIT-компиляцию. В этом случае разницы в скорости практически не будет заметно.

    Сам я люблю и уважаю Python, поэтому порекомендую его. Хотя бы потому что в Twisted, Tornado да и asyncio есть корутины (coroutines), а в новых версиях Python даже async/await. Эти конструкции позволят Вам писать в линейном стиле и избежать лапшекода как в JavaScript.

    PHP:
    1. Ratchet (уже писали о нем)
    2. phpDaemon

    PHP рекомендовать не буду, разве что если у Вас вся система на PHP и программисты больше не знают других языков.

    Если очень нужна высокая скорость и нетребовательность к ресурсам, пишите сразу на Go. Вот выше Вам уже посоветовали комплексные решения типа Centrifugo (который кстати сначала был написан на Python + Tornado).

    P. S. Забыл отметить, что если Вам нужны исключительно веб-сокеты (которые будут работать во всех современных браузерах), то Вы вообще можете отказаться от Socket.io и SockJS. Эти библиотеки хороши для обеспечения совместимости со старыми браузерами, ну или для случаев, когда вебсокеты режутся сетевым оборудованием. Эти библиотеки по-умолчанию переключат браузер в режим long-polling.

    Однако если Вам все это не нужно - то не берите, тем самым уменьшите оверхед на браузер и сервер.
    Ответ написан
    Комментировать
  • Что нужно для написания чата на php и js?

    gadfi
    @gadfi
    https://gamega.org
    чат на php довольно таки плохая идея, реально конечно, простейший long polling вам в помощь, но все равно серьезную нагрузку не выдержит (не надо про вк и фб, чат там не на php)
    может для реализации чата лучше посмотреть в строну той же centrifugo или чего то подобного
    зы с php нормально дружит
    зыы статья о ней
    Ответ написан
    4 комментария
  • Как собрать логику и работу websockets?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Можете посмотреть в направлении систем типа centrifugo
    Ответ написан
    Комментировать
  • Грамотная реализация системы диалогов на сайте (Архитектура)?

    @FireGM
    Хранить стандартно в бд, а доставлять к клиентам при помощи centrifugo
    Ответ написан
    Комментировать
  • Как правильно организовать push уведомления на сайте?

    Я для пуш сообщений centrifugo использую, кроме нее дополнительно ставить ничего не надо на сервер (ну разве что supervisor). Организация такая: прочитать документацию, сгенерировать конфиг для центрифуги, запустить ее, скачать либу с гитхаба для php сервера и пример для клиента и запилить свое приложение. Если используете ларавел, то вообще все быстро сделаете на родных евентах и бродкастинге сообщений.
    Ответ написан
    1 комментарий
  • Как начать использовать технологию WebSocket?

    За тот срок, что прошел с написания этого вопроса вы уже скорее всего подобрали для себя websocket сервер, но если нет - присмотритесь к centrifugo. habrahabr.ru/company/mailru/blog/266017 - статья о сервере, https://fzambia.gitbooks.io/centrifugal/content/li... - взаимодействие с php (на ларавел есть пакет, на yii может тоже найдется).
    Ответ написан
    1 комментарий
  • Для чего нужны фреймворки и какой лучше для Python, для создания сайтов?

    Sheregeda
    @Sheregeda
    always be coding
    Еще можно попробовать tornado - расширяемый, неблокирующий веб-сервер и фреймворк, написанный на python:
    www.tornadoweb.org/en/stable
    Будет "в тему", если захочется работать с websocket.

    Кстати, для сокетов и реалтайма есть прикольная штука - centrifuga:
    https://github.com/centrifugal/centrifuge
    habrahabr.ru/company/mailru/blog/237257
    https://www.youtube.com/watch?v=FCxsA2htQRY
    Ответ написан
    Комментировать
  • Можно ли разделить нагрузку между потоками/процессами/ядрами?

    @radioxoma
    Python в чистом виде никогда не будет самым быстрым. Хотите быстро - используйте компилируемые языки. Хотите ещё быстрее? Используйте GPU. И, тем не менее, python весьма удобен для создания высокоуровневого интерфейса и контроля за модулями на других языках.

    Что касается требовательных к CPU задач (подчёркиваю, не input/output), то это довольно болезненная тема. Из-за GIL треды не будут исполняться на разных ядрах одновременно, однако это можно обойти. Итак, варианты:
    • использовать процессы (модуль multiprocessing, но порождение процесса, в сравнении с тредом, дорогое и поможет только если некая минимальная задача выполнятся достаточно долго);
    • cython (можно отпускать GIL и писать threading-safe код на си);
    • opencl (опять си, вычисления переносятся на совместимый CPU/GPU);
    • Theano (символьная математика, генерирует оптимизированный код, который будет исполняться на CPU или GPU).

    Вот великолепная статья по указанным методам. Разумеется, все перечисленное имеет смысл, если задача допускает распараллеливание.
    Ответ написан
    Комментировать