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

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

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

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

  • апплеты сокеты, предоставляемые Java (требуется java установлен)
  • Флэш-сокеты обеспечивается с помощью флэш (нужен Flash установлено)

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

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

5 ответов


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

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

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

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

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

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

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

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


Я не могу улучшить ответы Канаки на ваши второстепенные вопросы, и я знаю, что этому вопросу год. Но главный вопрос:--0--> существует проект под названием Java / JavaScript Socket Bridge это может быть то, что вы (или кто-либо попадается на этой странице из поиска Google) ищете. Преимущество этого метода перед другими заключается в том, что он не требует запуска ни клиентской, ни серверной службы. Так, например, если вы хотели реализовать IRC-клиент исключительно в JavaScript, но ваш веб-узел не дает вам достаточных прав для прокси-соединения, этот Java-апплет будет способом. Единственная проблема - убедиться, что клиент установлен и разрешен Java.


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

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

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

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


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

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

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

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

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

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