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

标签 java android sockets client websocket

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

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

最佳答案

WebSocket 协议(protocol)由 IETF 6455 定义.

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

WebSocket 连接以 HTTP 兼容的握手开始,这使得它可以更轻松地与现有的网络基础设施集成。它还为其提供了安全的跨源功能。

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

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

关于java - 是什么让这个 android 库成为真正的 websocket 客户端库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11978979/

相关文章:

android - 手势和 OpenGL

Android按钮onClick拦截滚动

java - 如何从 Java 中的字符串模板生成字符串?

java - Collections.synchronizedSortedMap 与 ConcurrentSkipListMap 用于并发使用的排序映射

java - scala.Array[Long] 不符合预期类型 scala.Array[java.lang.Long]

c++ - 尽管有 IP_MULTICAST_LOOP(Linux、C++、UDP),IP_ADD_MEMBERSHIP 结果为 "No device found"

c++ - 为 posix recv 设置超时会导致丢失 udp 数据包吗?

java - 循环不完全工作java

java - 测试应用程序时出错 - Firebase 测试实验室

sockets - httplistener异步和同步的区别