Ответ 1
Я не могу ответить на все вопросы, но я сделаю все возможное.
Как вы уже знаете, WS - это только постоянное полнодуплексное TCP-соединение с фреймированными сообщениями, где первоначальное подтверждение связи является HTTP-подобным. Вам нужен сервер, который прослушивает входящие запросы WS и связывает с ними обработчик.
Теперь это возможно с Apache HTTP Server, и я видел несколько примеров, но официальной поддержки нет, и это осложняется. Что сделает Апач? Где будет ваш обработчик? Там модуль, который перенаправляет входящие запросы WS во внешнюю общую библиотеку, но это не обязательно для других отличных инструментов для работы с WS.
Тенденции WS-сервера теперь включают в себя: Autobahn (Python) и Socket.IO (Node.js = JavaScript на сервере). Последний также поддерживает другие хакерские "постоянные" соединения, такие как длительный опрос и все COMET. Существуют и другие малоизвестные структуры WS-сервера, такие как Ratchet (PHP, если вы только знакомы с этим).
В любом случае вам нужно будет прослушивать порт, и, конечно, этот порт не может быть таким же, как и HTTP-сервер Apache, уже запущенный на вашем компьютере (по умолчанию = 80). Вы можете использовать что-то вроде 8080, но даже если этот конкретный вариант является популярным, некоторые брандмауэры могут все еще блокировать его, поскольку он не должен быть веб-трафиком. Вот почему многие люди выбирают 443, который является HTTP-защищенным портом, который по очевидным причинам брандмауэры не блокируются. Если вы не используете SSL, вы можете использовать 80 для HTTP и 443 для WS. Сервер WS не должен быть безопасным; мы просто используем порт.
Изменить. Согласно Iharob Al Asimi, предыдущий абзац неверен. У меня нет времени, чтобы исследовать это, поэтому, пожалуйста, см. Его работу для более подробной информации.
О протоколе, поскольку Википедия показывает, он выглядит следующим образом:
Клиент отправляет:
GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://example.com
Ответы сервера:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
и поддерживает соединение. Если вы можете реализовать это рукопожатие и базовую структуру сообщений (инкапсулируя каждое сообщение небольшим заголовком, описывающим его), тогда вы можете использовать любой язык на стороне клиента, который вы хотите. JavaScript используется только в веб-браузерах, потому что он встроен.
Как вы можете видеть, по умолчанию "метод запроса" является исходным HTTP GET, хотя это не HTTP и теряет все, что с HTTP после этого подтверждения. Я предполагаю, что серверы, которые не поддерживают
Upgrade: websocket
Connection: Upgrade
ответит с ошибкой или содержимым страницы.