是什么让这个android库成为真正的websocket客户端库?

时间:2012-08-16 00:01:16

标签: java android sockets client websocket

https://github.com/koush/android-websockets/blob/master/src/com/codebutler/android_websockets/WebSocketClient.java

是什么让它成为真正的websocket客户端,而不仅仅是一个直接的套接字客户端?我看到它构造了HTTP请求,我想知道什么是正式的#34;定义" websocket与普通Java套接字的对比。

2 个答案:

答案 0 :(得分:2)

WebSocket协议由IETF 6455定义。

koush/android-websockets项目实现了WebSocket协议的IETF 6455版本。

WebSocket连接以HTTP兼容的握手开始,允许它更容易地与现有的Web基础结构集成。它还为其提供了安全的跨源功能。

建立连接后,WebSocket连接是全双工双向连接(例如,与HTTP长轮询不同)。但是,即使此时连接也不是原始套接字。 WebSocket是基于消息的(而不是像底层TCP层一样流式传输),因此它需要对数据进行成帧以指示消息边界。每个WebSocket帧至少有2个字节的头,表示帧的长度,无论是消息的最终帧还是延续,数据是UTF-8还是原始二进制等等。

此外,客户端(浏览器)到服务器WebSocket框架使用简单的运行XOR进行屏蔽,以避免Web中介(代理,缓存等)中的理论漏洞。

答案 1 :(得分:0)

WebSocket通过端口80处理HTTP。并且这样的数据既可以是文本的也可以是二进制的,而且,已知的标题 - 期望的标记很容易可见,例如HTTP请求302。然而,“普通”Java Socket可以是:

  • 命名管道
  • TCP / IP
  • UDP
  • 蓝牙

它是一种更通用的套接字机制,其中以二进制表示的数据速度具有最大吞吐量。

那将是“定义”,但它并不是一成不变的,例如,您可以通过在Base64中对其进行编码,然后通过HTTP发送二进制文件来通过“WebSocket”发送二进制文件

在Koush的案例中,他只是 围绕标准Socket创建了一个包装 (关键字是包装)来处理HTTP请求。它是开放的解释因此它不是一成不变的。可以轻松地创建一个围绕蓝牙的包装器,例如将其称为“ BTSocket ”,甚至称为“ IPCSocket ”,用于Socket上的进程间通信。