HTTP - WS и HTTPS - WSS

scorpion-ds

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

С HTTP все отлично, но вот с HTTPS проблема, судя по всему так просто реализовать wss не выйдет, реализовали при помощи прокси на nginx, но реализацию которую нам помог сделать админ, нас не устраивает, так как у нас должно быть несколько вебсокетов, а текущая реализация запускает их на одном порту, что весьма неудобно ...

Есть еще вариант написать прокси на самой Ноде, но такой вариант мы еще не рассматривали.

Может, кто-то уже сталкивался с такой задачей, куда лучше копать?
 

scorpion-ds

Новичок
В клиенте указывается что-то вроде ws://127.0.0.1:8080, получается что в вебсокетах только по порту можно указать различные сокеты, сейчас же у нас просто wss://127.0.0.1, получается все клиенты будут стучаться в один сокет.
 

fixxxer

К.О.
Партнер клуба
Бьемся с вебсокетами уже неоправданно много времени, сначала реализовали их средствами Симфони, но это оказался не очень удачный вариант, переделали на Ноду
получается что в вебсокетах только по порту можно указать различные сокеты
Продолжайте в том же духе, еще пару лет будете "биться".

Иногда все-таки надо читать спецификации, а не копипастить код со stackoverflow.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Бьемся с вебсокетами уже неоправданно много времени, сначала реализовали их средствами Симфони, переделали на Ноду
реализовали при помощи прокси на nginx, Есть еще вариант написать прокси на самой Ноде
куда лучше копать?
Вырежьте квадраты из красной бумаги, и повесьте в офисе. Или желтые треугольники.
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
так проект уже 3 раза сдох, но за деньгами не очень следят, так что нормально, можно резвиться
 

scorpion-ds

Новичок
Иногда все-таки надо читать спецификации, а не копипастить код со stackoverflow.
Я с нодой не дружу вовсе, да и с вебсокетами не работал раньше, мои идеи основываются на беглом гуглении, что бы понять кому именно это проще реализовать разработчику на ноде или админу, сейчас никто не хочет этими заниматься, я крайний ...

Админ на момент пятницы ничего не смог придумать с проксями, но я нашел, что это нормально реализуется на Ноде, попробуем так сделать.

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

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ты не джружишь с нодой, но нашел, что это нормально реализуется на ноде. Это оксюморон.
Ты или дружишь с нодой и можешь оценить сложность реализации задачи, или не дружишь - и не берешься ничего решать. Бегло погуглить - так хуже php языка в мире нет, и мы все дебилы.

Когда я год назад задался вопросом веб-сокетов, я сразу нашел
* http://socketo.me/ - нормальная реализация WS на ReactPHP, в которой рекомендуется интеграция с Symfony
* https://daemon.io/docs/en/#clients/websocket - реализация в довольно надежном фреймворке с контролем за worker-ами, только документацией не хотят заниматься
* http://wamp-proto.org/compared/ - готовый протокол на web socket-ах, чтобы не писать самому роутинг сообщений и rpc
* https://github.com/voryx/Thruway - реализация WAMP 2 на PHP
* https://github.com/crossbario/crossbar - самый популярный роутер на то время был на питоне

Надо очень постараться не найти эти ресурсы, так как они в первых результатах выдачи гугла и залинкованы в документации. Ну, кроме PHPDaemon, который здесь на форуме представлял автор, его и без гугла все помнят.

Запустить чат на веб-сокетах у меня заняло примерно один день. Предполагаю, что вы там совсем не хотите выполнить свою задачу.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Увольнять надо и админа, и всех вас. :)

"Биться неоправданно много времени" и не прочитать при этом RFC 6455 - это полный п.

Ну вот совсем для тупых, самое примитивное - два сервиса на ноде/reactphp/whatever и два location-а.

PHP:
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
upstream ws1 {
    server 127.0.0.1:8081;
    keepalive 1024;
}
upstream ws2 {
    server 127.0.0.1:8082;
    keepalive 1024;
}
server {
...
    location /ws1 {
        proxy_pass http://ws1/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Remote-Addr $remote_addr;
    }
    location /ws2 {
        proxy_pass http://ws2/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Remote-Addr $remote_addr;
    }
}
 

scorpion-ds

Новичок
* http://socketo.me/ - нормальная реализация WS на ReactPHP, в которой рекомендуется интеграция с Symfony
Мой первый вариант, был реализован на базе:
https://github.com/GeniusesOfSymfony/WebSocketBundle

Которая в свою очередь использует Ratchet, стабильность была так себе, вместе с чатом у "меня" ушло дня три, плюс фронт разработчик со своей стороны потратил порядка двух дней, результат был не слишком стабильным, потому фронт взялся переписать на ноду. Хотя вариант выглядел ничего так, особенно RPC удобно реализованы.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
стабильность дает роутер, а клиент делает повтор пакета, который не прошел
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@fixxxer, назачем городить два подключения веб-сокетов, если можно разделить по каналам на роутере?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Что я делаю не так?
Не юзаешь Akamai с comet =)
Эти мудаки принципиально не закрывают соединение с сервером, когда клиент отваливается - пригодиццо.
А когда клиент регулярно шлет ping - сигнализирует, что он тут, в online, при long polling открывается новое соединение. Человек 500 за несколько часов откушивают 50 тысяч соединений. Facepalm.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
фронт взялся переписать на ноду
Это само по себе диагноз. У меня тут тоже словом front-end называют веб-сервер. Пара грамотных человек используют официальный термин front-end node, но большинство не утруждает себя, и звучит офигенно: "логи php с фронт-энда".
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
А когда клиент регулярно шлет ping - сигнализирует, что он тут, в online, при long polling открывается новое соединение. Человек 500 за несколько часов откушивают 50 тысяч соединений. Facepalm.
Да и без акамаев бывают дурные прокси, которые после connect-а соединение держат до второго пришествия. Я на клиенте шлю пинги, а соединения, где долго нет активности, на сервере по таймауту закрываю.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
а расскажи, чем определяешь продолжительность соединения без активности?
 
Последнее редактирование:
Сверху