Как установить соединение TCP Socket из веб-браузера (на стороне клиента)? - PullRequest
22 голосов
/ 08 ноября 2011

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

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

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

  • Апплеты, предоставляемые Java (требуется Java)
  • Флэш-сокеты, предоставляемые Flash (требуется Flash)

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

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

Ответы [ 5 ]

49 голосов
/ 08 ноября 2011

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

[Является ли] протокол веб-сокетов настолько простым дляРеализуете ли вы, что [это] «почти» сокеты?

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

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

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

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

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

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

4 голосов
/ 26 октября 2012

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

2 голосов
/ 08 ноября 2011

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

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

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

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

1 голос
/ 10 июня 2015

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

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

  • Редирект
  • NAT keepalive
  • Мультиплексирование через URI
  • Обрамление
0 голосов
/ 08 ноября 2011

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

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

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

...