Как запустить сокет и сервер веб-сокетов на одном и том же порту?

Я работаю на сервере, который прослушивает порт 80

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

Работает только, если websockify работает на другом порту и перенаправляет трафик на сервер сокетов.

к несчастью websockify плохо документированы, и нет доступных учебных пособий.

С чего начать, если я хочу создать только один сервер, который прослушивает только один порт и принимает как веб-сокеты, так и собственные сокеты TCP?

0

Решение

Если ваш сервер прослушивает соединения через порт 80, он говорит http? Потому что, если нет, не слушайте порт 80: порт 80 хорошо зарекомендовал себя как носитель трафика HTTP

Далее — IP-адрес и порт вместе являются уникальными идентификаторами конечной точки. Если удаленный клиент подключается к вашему серверу через порт 80, кроме ip и порта назначения, то никакой другой информации о том, какое сетевое устройство должно идентифицировать, какое приложение, прослушивающее порт 80, заслуживает пакет, нет. Учитывая, что предоставление нескольких IP-адресов довольно сложно — невозможно через NAT — единственная информация, которая действительно доступна для маршрутизации пакета к правильному слушателю, — это порт. Так что вы просто не можете иметь два приложения, прослушивающие один и тот же порт.

Наконец, веб-сокеты ведут себя как собственные сокеты, ПОСЛЕ первоначального HTTP-согласования. Это означает, что вместо использования websocksifyВы могли бы научить свое собственное серверное приложение обнаруживать попытку подключения клиентом websocket и, при необходимости, выполнять начальное согласование перед переходом в «собственный» режим.

Написание серверов Websocket дает краткое описание того, что ваш собственный сервер должен реализовать.

3

Другие решения

Если вы посмотрите на WebSocket, вы увидите, что это протокол поверх уровня TCP. Таким образом, ваш серверный сокет может быть привязан только один раз к порту 80, и вам решать, будете ли вы использовать обычный TCP, WebSocket или свой собственный протокол. Нет волшебства, которое позволяет переключаться с WebSocket на TCP и наоборот.

-2

По вопросам рекламы [email protected]