SSL и сокет сервер

t3[0one]

Новичок
У меня есть сокет сервер на php. Сервер запускается отдельно от всего и умеет работать как websocket сервер. Все хорошо если соединение клиент/сервер происходит без ssl . Но когда соединение идет по wss , то данные приходят закодированными. Как раскодировать эти данные ? Что почитать ?

Код:
if ($agentSocket = socket_accept($this->serverSocket)) {
    while($buf = @socket_read($agentSocket , 1024, PHP_BINARY_READ ))
        if($buf = trim($buf)) break;
}
//$buf - закодированная строка
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
а nginx'ом коммуникацию заврапить не?
 

t3[0one]

Новичок
а зачем кишки наружу?, можно и apache
Что бы скрипт сервера не зависел от внешнего окружения и мог работать без лишнего гемароя )) Сервер еще может работать и по другим протоколам, честно даже не знаю получится ли заврапить nginx в таком случаи. А как это вообще сделать через nginx ? Какая схема ?
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
Что бы скрипт сервера не зависел от внешнего окружения и мог работать без лишнего гемароя
мне кажется идея "без лишнего гемароя" полностью провалена, иначе зачем вопрос?
А как это вообще сделать через nginx
так же как и обычно получил, перепроксил
Код:
location /websocket/ {

    proxy_pass http://backend_host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;

}
ну может сертификат прописать, почитай...
 

t3[0one]

Новичок
так же как и обычно получил, перепроксил
Возможно я немного не понимаю как работает проксирование.
Бывает нужно писать обработчики которые работают как cli скрипты по несколько часов. Возникает потребность следить за состоянием процессов, для этого я придумал что то типа "логера" который поднимает сокет сервер и через него отдает информацию о текущем состоянии процесса. CLI скрипты запускается в консоли, как в таком случаи прикрутить nginx?
 

WMix

герр M:)ller
Партнер клуба
клиент (тот кто subscribe делает) обращается к nginx, nginx передает (проксирует) на php.
те клиент обращается не напрямую на скрипт а через proxy
 

t3[0one]

Новичок
клиент (тот кто subscribe делает) обращается к nginx, nginx передает (проксирует) на php.
те клиент обращается не напрямую на скрипт а через proxy
Я правильно понимаю? Клиент по tcp подключается например localhost:8081 , а nginx проксирует весь tcp трафик на localhost:8082 уже раскодированным ? Кроме websocket у меня там еще есть свой протокол, не мешало бы его тоже так же шифровать ))
 
Последнее редактирование:

t3[0one]

Новичок
правильно понимаешь, только вероятнее клиетн обращается на mysite.ru:8081



свой это какой?
у меня там без заморочек , свои заголовки, формат передачи данных. Типа для разных агентов/клиентов разные протоколы.По сути мне это нужно только для websocketa эта заморочка. Браузер не умеет с сокетами работать, на сколько я понимаю, приходится через websocket костылить

Понял спасибо за помощь, буду курить nginx
 

fixxxer

К.О.
Партнер клуба
Имплементить websocket-ы ручками - это тоже так себе идея. :)
Тем более в таком варианте, который ты описываешь, есть две проблемы:

1) одновременно будет обработан только один запрос. Открою wss соединение и буду ждать, не закрывая соединение - и все, твой скрипт будет тоже меня ждать вместе со всеми остальными клиентами, пока таймаут не случится.

2) если ты надеешься, что ты указал 1024 и прочитается 1024 - нет, за один вызов прочитается столько, сколько прилетело. Не более 1024, но может быть запросто и 1 байт.

Корректно реализовать вручную не так-то и просто. Куда проще взять готовую библиотеку, например, http://socketo.me/
 

t3[0one]

Новичок
1) одновременно будет обработан только один запрос. Открою wss соединение и буду ждать, не закрывая соединение - и все, твой скрипт будет тоже меня ждать вместе со всеми остальными клиентами, пока таймаут не случится.
У меня нон блок сервер, не ждет ))

Корректно реализовать вручную не так-то и просто. Куда проще взять готовую библиотеку, например
Думал какие то сторонние библиотеки прикрутить, но тогда все сильно усложняется =( Библиотека маловесная и по задумке должна работать без дополнительных настроек.
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Какая связь между WS сервером и долгой обработкой?
Этим должны заниматься разные процессы.
А для перевода WS потока в сообщения и обратно давно есть вещи типа pushpin, centrifugo и иже с ними.
 

t3[0one]

Новичок
Какая связь между WS сервером и долгой обработкой?
Вопрос об времени обработки не стоит
А для перевода WS потока в сообщения и обратно давно есть вещи типа pushpin, centrifugo и иже с ними.
Вопрос как работает ws тоже не стоит.Вопрос в том, что если соединение c ssl шифрованием, то все данные приходят зашифрованные , вообще все , включая заголовки. Мне нужно эти данные расшифровать, сертификаты есть, куда их совать не очень понятно -(
 

t3[0one]

Новичок
Плохо реализовали, раз не работает…

Пробол эту функцию, это потоковые сокеты. К меня не получилось с ней(функцией), я предположил что это из-за того , что это потоковые сокеты, а я использую низкоуровневые сокеты.
 
Последнее редактирование:
Сверху