是什么让它成为真正的websocket客户端,而不仅仅是一个直接的套接字客户端?我看到它构造了HTTP请求,我想知道什么是正式的#34;定义" websocket与普通Java套接字的对比。
答案 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可以是:
它是一种更通用的套接字机制,其中以二进制表示的数据速度具有最大吞吐量。
那将是“定义”,但它并不是一成不变的,例如,您可以通过在Base64中对其进行编码,然后通过HTTP发送二进制文件来通过“WebSocket”发送二进制文件
在Koush的案例中,他只是 围绕标准Socket
创建了一个包装 (关键字是包装)来处理HTTP请求。它是开放的解释因此它不是一成不变的。可以轻松地创建一个围绕蓝牙的包装器,例如将其称为“ BTSocket ”,甚至称为“ IPCSocket ”,用于Socket
上的进程间通信。