netty websocket连接通过java客户端

时间:2012-09-13 09:57:22

标签: java websocket netty

是否可以在没有握手请求的情况下在java代码中创建websocket连接?

我知道如何使用以下内容创建一个带有handhsake请求:

  String request = "GET " + path + " HTTP/1.1\r\n"
            + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n"
            + "Host: " + host + "\r\n" + "Origin: " + origin + "\r\n"
            + extraHeaders.toString() + "\r\n";

但是我想要避免上述情况,一旦我打开套接字连接,只想在频道上发送帧?这可能吗?

1 个答案:

答案 0 :(得分:3)

如果没有WebSocket握手,则无法创建WebSocket连接。 WebSocket握手和成帧是协议的关键部分。握手是HTTP兼容的,允许WebSockets更容易地与现有的Web基础结构交互。除其他外,握手增加了安全机制并允许跨源资源共享(CORS)。

握手后,每个WebSocket帧仍然不是原始数据。 WebSocket是一种基于消息的协议,因此帧头包含消息描述,帧长度,消息类型(二进制,文本,ping等)等。此外,必须使用正在运行的XOR来屏蔽从客户端(浏览器)到服务器的数据面具。这是为了避免HTTP中介(代理,HTTP缓存等)中的理论漏洞。

不要被名称中的“Socket”误导。 WebSockets具有原始TCP套接字的许多优点,例如全双工,双向,长寿命和低延迟,但它是基于消息的传输协议,分层在原始TCP套接字上并使用HTTP友好握手。

有关详细信息,请参阅官方IETF 6455 WebSocket spec