Я читал о WebSockets, но они не кажутся чистыми “сокетами”, потому что над ними существует протокол прикладного уровня. “WS”
Есть ли способ сделать чистое соединение сокетов из веб-браузера, чтобы оживить веб-страницы?
Вот мои случайные удары в темноте
- Сокеты Applets, предоставляемые Java (необходимо установить java)
- Флеш-гнезда, предоставляемые Flash (требуется установленная вспышка)
Но о HTML5, почему они называются WebSockets, если они не являются сокетами?
Является ли протокол websocket настолько простым для реализации, что это “почти” -соединения?
Я читал о WebSockets, но они не кажутся чистыми “сокетами”, потому что над ними существует протокол уровня приложений.
[Является]] протоколом websocket настолько просто реализовать, что [это] “почти” -sockets?
Разрешить регулярные подключения сокетов непосредственно из браузера никогда не произойдет, потому что это открывает огромный риск. WebSockets примерно так же близок к сырым сокетам из браузера, как вы собираетесь получить. Первоначальное рукопожатие WebSockets аналогично рукопожатию HTTP (позволяя веб-серверам прокси-серверу/мосту) и добавляет безопасность типа CORS. Кроме того, WebSockets – это транспорт на основе сообщений (а не потоковая передача как необработанный TCP), и это делается с использованием двухбайтового заголовка для каждого кадра сообщения.
Даже флеш-память не может полностью выполнить необработанные TCP-соединения. Флэш-сокеты также добавляют безопасность CORS, но вместо встроенного подтверждения соединения флеш-сокета делают подключение к порту 843 на целевом сервере для запроса файла политики безопасности.
Есть ли способ сделать чистое соединение сокетов из веб-браузера, чтобы оживить веб-страницы?
Да, вы можете использовать мой websockify мост/прокси, который позволяет браузеру с поддержкой WebSockets напрямую подключаться к сокету TCP через websockify.
Но о HTML5, почему они называются WebSockets, если они не являются сокетами?
WebSockets – это транспорт, построенный на сокетах TCP. После рукопожатия очень минимальные накладные расходы (обычно это только двухбайтовый заголовок).
Я не могу улучшить ответы Канаки на ваши вторичные вопросы, и я знаю, что этот вопрос – год. Но для основного вопроса Is there any way of doing a pure socket connection from a web browser, to enliven webpages?
Существует проект, называемый Java/JavaScript Socket Bridge, который может быть тем, что вы (или кто-то, кто сталкивается с этим страница из поиска Google). Преимущество этого метода над тем, что другие упомянули, заключается в том, что он не требует запуска клиентской или серверной службы. Так, например, если вы хотите внедрить IRC-клиент исключительно на JavaScript, но ваш веб-хост не позволит вам получить достаточные права на прокси-соединение, этот Java-апплет станет для вас способом. Единственная проблема – убедиться, что у клиента установлена и разрешена Java.
Вы можете просто отправлять данные между клиентом и сервером с помощью WebSockets. Проще говоря, единственная разница, которую вводит WebSockets, заключается в том, что клиент:
- добавляет некоторые байты заголовков, такие как тип данных и длина
- добавляет маски и кодирует данные, используя их
Сервер также должен добавить байты заголовков, но не нуждается в кодировании данных.
Если вы правильно реализуете протокол (на стороне сервера, то есть, поскольку браузер уже имеет реализацию), вы можете легко использовать его для отправки текстовых и двоичных данных. (Хотя поддержка браузера является узкой, особенно для последней.)
Преимущество WebSocket заключается в том, что он основан на HTTP. Вы можете использовать его также в средах, где используются HTTP-прокси. Таким образом, Websocket имеет более высокую инфраструктурную совместимость, чем обычный tcp.
Кроме того, http/WebSocket предоставляет вам некоторые функции, которые вы в противном случае должны указать самостоятельно:
- Перенаправление
- NAT keepalive
- Мультиплексирование через URI
- Обрамление
Если вы запрашиваете, чтобы некоторые данные были перенесены с сервера, он широко называется COMET или Reverse Ajax.
Веб-сокеты все еще не очень популярны, поскольку из-за наличия проблем с брандмауэром и минимальной поддержки от популярных браузеров.
Вы можете взглянуть на http://www.ape-project.org/, поскольку это одна из самых популярных реализаций (но родная для unix/linux только сейчас. Для окон они предлагают использовать виртуальную коробку или реализацию на основе vmware)