Я работаю на сервере, который прослушивает порт 80
Я хотел бы разрешить как родным клиентам, так и клиентам websocket подключаться к моему серверу.
Работает только, если websockify
работает на другом порту и перенаправляет трафик на сервер сокетов.
к несчастью websockify
плохо документированы, и нет доступных учебных пособий.
С чего начать, если я хочу создать только один сервер, который прослушивает только один порт и принимает как веб-сокеты, так и собственные сокеты TCP?
Если ваш сервер прослушивает соединения через порт 80, он говорит http? Потому что, если нет, не слушайте порт 80: порт 80 хорошо зарекомендовал себя как носитель трафика HTTP
Далее — IP-адрес и порт вместе являются уникальными идентификаторами конечной точки. Если удаленный клиент подключается к вашему серверу через порт 80, кроме ip и порта назначения, то никакой другой информации о том, какое сетевое устройство должно идентифицировать, какое приложение, прослушивающее порт 80, заслуживает пакет, нет. Учитывая, что предоставление нескольких IP-адресов довольно сложно — невозможно через NAT — единственная информация, которая действительно доступна для маршрутизации пакета к правильному слушателю, — это порт. Так что вы просто не можете иметь два приложения, прослушивающие один и тот же порт.
Наконец, веб-сокеты ведут себя как собственные сокеты, ПОСЛЕ первоначального HTTP-согласования. Это означает, что вместо использования websocksify
Вы могли бы научить свое собственное серверное приложение обнаруживать попытку подключения клиентом websocket и, при необходимости, выполнять начальное согласование перед переходом в «собственный» режим.
Написание серверов Websocket дает краткое описание того, что ваш собственный сервер должен реализовать.
Если вы посмотрите на WebSocket, вы увидите, что это протокол поверх уровня TCP. Таким образом, ваш серверный сокет может быть привязан только один раз к порту 80, и вам решать, будете ли вы использовать обычный TCP, WebSocket или свой собственный протокол. Нет волшебства, которое позволяет переключаться с WebSocket на TCP и наоборот.