Как установить соединение TCP Socket из веб-браузера (на стороне клиента)?

Я читал о WebSockets, но они не кажутся чистыми "сокетами", потому что над ними существует протокол прикладного уровня. "WS"

Есть ли способ сделать чистое соединение сокетов из веб-браузера, чтобы оживить веб-страницы?

Вот мои случайные удары в темноте

  • Сокеты Applets, предоставляемые Java (необходимо установить java)
  • Флеш-гнезда, предоставляемые Flash (требуется установленная вспышка)

Но о HTML5, почему они называются WebSockets, если они не являются сокетами?

Является ли протокол websocket настолько простым для реализации, что это "почти" -соединения?

Ответ 1

Я читал о WebSockets, но они не кажутся чистыми "сокетами", потому что над ними существует протокол уровня приложений.

[Является]] протоколом websocket настолько просто реализовать, что [это] "почти" -sockets?

Разрешить регулярные подключения сокетов непосредственно из браузера никогда не произойдет, потому что это открывает огромный риск. WebSockets примерно так же близок к сырым сокетам из браузера, как вы собираетесь получить. Первоначальное рукопожатие WebSockets аналогично рукопожатию HTTP (позволяя веб-серверам прокси-серверу/мосту) и добавляет безопасность типа CORS. Кроме того, WebSockets - это транспорт на основе сообщений (а не потоковая передача как необработанный TCP), и это делается с использованием двухбайтового заголовка для каждого кадра сообщения.

Даже флеш-память не может полностью выполнить необработанные TCP-соединения. Флэш-сокеты также добавляют безопасность CORS, но вместо встроенного подтверждения соединения флеш-сокета делают подключение к порту 843 на целевом сервере для запроса файла политики безопасности.

Есть ли способ сделать чистое соединение сокетов из веб-браузера, чтобы оживить веб-страницы?

Да, вы можете использовать мой websockify мост/прокси, который позволяет браузеру с поддержкой WebSockets напрямую подключаться к сокету TCP через websockify.

Но о HTML5, почему они называются WebSockets, если они не являются сокетами?

WebSockets - это транспорт, построенный на сокетах TCP. После рукопожатия очень минимальные накладные расходы (обычно это только двухбайтовый заголовок).

Ответ 2

Я не могу улучшить ответы Канаки на ваши вторичные вопросы, и я знаю, что этот вопрос - год. Но для основного вопроса 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.

Ответ 3

Вы можете просто отправлять данные между клиентом и сервером с помощью WebSockets. Проще говоря, единственная разница, которую вводит WebSockets, заключается в том, что клиент:

  • добавляет некоторые байты заголовков, такие как тип данных и длина
  • добавляет маски и кодирует данные, используя их

Сервер также должен добавить байты заголовков, но не нуждается в кодировании данных.

Если вы правильно реализуете протокол (на стороне сервера, то есть, поскольку браузер уже имеет реализацию), вы можете легко использовать его для отправки текстовых и двоичных данных. (Хотя поддержка браузера является узкой, особенно для последней.)

Ответ 4

Преимущество WebSocket заключается в том, что он основан на HTTP. Вы можете использовать его также в средах, где используются HTTP-прокси. Таким образом, Websocket имеет более высокую инфраструктурную совместимость, чем обычный tcp.

Кроме того, http/WebSocket предоставляет вам некоторые функции, которые вы в противном случае должны указать самостоятельно:

  • Перенаправление
  • NAT keepalive
  • Мультиплексирование через URI
  • Обрамление

Ответ 5

Если вы запрашиваете, чтобы некоторые данные были перенесены с сервера, он широко называется COMET или Reverse Ajax.

Веб-сокеты все еще не очень популярны, поскольку из-за наличия проблем с брандмауэром и минимальной поддержки от популярных браузеров.

Вы можете взглянуть на http://www.ape-project.org/, поскольку это одна из самых популярных реализаций (но родная для unix/linux только сейчас. Для окон они предлагают использовать виртуальную коробку или реализацию на основе vmware)