Название: WebSocket + WebServer проксирование Отправлено: RedDog от Март 07, 2013, 12:55 Надо реализовать такую схему:
Клиент (веб-браузер) подключается к веб-серверу по HTTPS, после загрузки страницы клиент подключается по WebSocket с использованием того же канала HTTPS. Т.е. необходимо одним сертификатом авторизироваться для HTTPS и WSS, и это должен быть один канал связи. Веб сервер связывается с самописным (на С++) сервером по FastCGI. Как можно реализовать вебсокет по одному каналу? И как такое вообще можно провернуть? Название: Re: WebSocket + WebServer проксирование Отправлено: alexis031182 от Март 07, 2013, 17:43 Разве открывается отдельное соединение для WS и WSS? По стандарту, вроде, должен использоваться тот же канал, просто осуществляется согласованный переход с одного протокола на другой.
Название: Re: WebSocket + WebServer проксирование Отправлено: RedDog от Март 07, 2013, 20:51 Разве открывается отдельное соединение для WS и WSS? По стандарту, вроде, должен использоваться тот же канал, просто осуществляется согласованный переход с одного протокола на другой. Я у себя реализовал схему такую (пока без ССЛ):Поднял веб-сервер lighttpd, который по запросу выдает статическую страничку html с джаваскриптом, последний в свою очередь открывает веб-сокет на 1177 порту. На этой же машине запустил сервер веб-сокетов (написанный на Qt). Все подключается и работает, но очень сильные сомнения, в том, что по одному каналу веб-сервер и веб-сокет работают. Сейчас проверить не могу (на работе проект остался), но сдается мне, что если html страничку загружать не с сервера, а из файла, то в принципе картина работоспособности не поменяется, т.е. веб-сокет так же создастся, т.о. http соединение в этом случае ни при чем. В общем вопрос трансформируется в следующий: как спроксировать этот веб сокет через веб-сервер lighttpd, таким образом, что бы сервер веб-сокета находился за вебсервером и не торчал отдельным портом в общую сеть? Название: Re: WebSocket + WebServer проксирование Отправлено: alexis031182 от Март 07, 2013, 21:29 Я у себя реализовал схему такую (пока без ССЛ): Я вероятно чего-то не понимаю. Зачем открывать новое соединение, если можно использовать текущее на 80 порту? WebSockets - это просто переключение языка общения между клиентом и сервером. Этот протокол и был создан для того, чтобы исключить необходимость в постоянном открытии новых соединений для проверки изменения данных и т.п. задач. Используется текущее открытое. Не отправляются заголовки. Сервер имеет возможность сообщить клиенту об изменении данных. То есть браузер и веб-сервер начинать работать на 80 порту как обычные сетевые приложения.Поднял веб-сервер lighttpd, который по запросу выдает статическую страничку html с джаваскриптом, последний в свою очередь открывает веб-сокет на 1177 порту. На этой же машине запустил сервер веб-сокетов (написанный на Qt). Все подключается и работает, но очень сильные сомнения, в том, что по одному каналу веб-сервер и веб-сокет работают. А ну так-то конечно. У Вас как бы два сервера получается. Естественно, раз организуется новое соединение, тогда и авторизацию необходимо проходить по новой.Сейчас проверить не могу (на работе проект остался), но сдается мне, что если html страничку загружать не с сервера, а из файла, то в принципе картина работоспособности не поменяется, т.е. веб-сокет так же создастся, т.о. http соединение в этом случае ни при чем. Ну да. Ваш вебсервер должен быть одним приложением, чтобы заработало то, что Вы задумали.В общем вопрос трансформируется в следующий: как спроксировать этот веб сокет через веб-сервер lighttpd, таким образом, что бы сервер веб-сокета находился за вебсервером и не торчал отдельным портом в общую сеть? Вряд ли lighttpd умеет такое, а именно он должен это делать. С другой стороны, это всё равно будет новое отдельное соединение, пусть и между lighttpd и сервером веб-сокетов.Название: Re: WebSocket + WebServer проксирование Отправлено: RedDog от Март 07, 2013, 22:07 В принципе lighttpd не так важен, можно другой сервер.
Мне важно, что WebSocket не был отдельным подключением, а допустим по адресу https://localhost была статическая вебстраница, а по адресу https://localhost/websock сервер проксировал бы соединение на мой отдельный сервер. Вот тут то я как раз и теряюсь - как его поднять, без указания дополнительно порта, ибо на 443 он уже из за вебсервера не поднимется. Название: Re: WebSocket + WebServer проксирование Отправлено: alexis031182 от Март 07, 2013, 22:16 Вы разделяете HTTP и WebSockets между собой, что наверное не совсем верно с учётом того, что Вам нужно сохранить однажды открытое соединение. Это означает, что Ваш сервер веб-сокетов должен быть одновременно и http-сервером.
Название: Re: WebSocket + WebServer проксирование Отправлено: RedDog от Март 07, 2013, 22:56 Внезапно пришла такая мысль:
повесить свой Qt WebSocket сервер на локальный порт, т.е. что то типа такого: Код: QTcpServer::listen(QHostAddress::LocalHost, 9999); Остается только выяснить, может ли какой либо веб-сервер (который поддерживает еще к тому же FastCGI) пробрасывать таким макаром соединение. Название: Re: WebSocket + WebServer проксирование Отправлено: alexis031182 от Март 07, 2013, 22:59 nginx наверное может.
|