Android使用OkHttp WebSocket

什么是WebSocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议。它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,客户端和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在这里插入图片描述
Websocket使用和 HTTP 相同的 TCP 端口,可以绕过大多数防火墙的限制。默认情况下,Websocket协议使用80端口;运行在TLS之上时,默认使用443端口。其协议标识符为ws,如果加密使用wss,服务器网址为URL,如:

ws://www.example.com/
wss://www.example.com/

Webscoket具有以下优点:

  • 较少的控制开销:在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小
  • 更强的实时性:由于协议是全双工的,所以服务器可以随时主动给客户端下发数据
  • 保持连接状态:与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)
  • 更好的二进制支持:Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容
  • 更好的压缩效果:相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率

OkHttp WebSocket使用

引用okhttp库

implementation 'com.squareup.okhttp3:okhttp:3.12.1'

初始化okhttp,创建request,并开始连接websocket

client = new OkHttpClient.Builder()
        .writeTimeout(5, TimeUnit.SECONDS)
        .readTimeout(5, TimeUnit.SECONDS)
        .connectTimeout(10, TimeUnit.SECONDS)
        .build();
request = new Request.Builder().url(url).build();
client.newWebSocket(request, createListener());

createListener创建相关监听事件

private WebSocketListener createListener() {
    return new WebSocketListener() {
        @Override
        public void onOpen(WebSocket webSocket, Response response) {
            super.onOpen(webSocket, response);
            Log.d(TAG, "open:" + response.toString());
            mWebSocket = webSocket;
        }

        @Override
        public void onMessage(WebSocket webSocket, String text) {
            super.onMessage(webSocket, text);
        }

        @Override
        public void onMessage(WebSocket webSocket, ByteString bytes) {
            super.onMessage(webSocket, bytes);
        }

        @Override
        public void onClosing(WebSocket webSocket, int code, String reason) {
            super.onClosing(webSocket, code, reason);
        }

        @Override
        public void onClosed(WebSocket webSocket, int code, String reason) {
            super.onClosed(webSocket, code, reason);
        }

        @Override
        public void onFailure(WebSocket webSocket, Throwable t, Response response) {
            super.onFailure(webSocket, t, response);
        }
    };
}

发送消息,WebSocket 提供了两个方法,一个直接发送字符串,一个发送二进制数据

mWebSocket.send(text);
mWebSocket.send(byteString);

简单的websocket已经搭建好,详细代码在github上,后续还会在跟进

以下是Android使用OkHttp发送WebSocket请求的示例代码: ```java import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.WebSocket; import okhttp3.WebSocketListener; import okio.ByteString; public class WebSocketClient extends WebSocketListener { private OkHttpClient client; private WebSocket webSocket; public WebSocketClient() { client = new OkHttpClient(); } public void start() { Request request = new Request.Builder().url("wss://your.websocket.url").build(); webSocket = client.newWebSocket(request, this); } @Override public void onOpen(WebSocket webSocket, Response response) { super.onOpen(webSocket, response); // 连接成功 webSocket.send("Hello, WebSocket!"); } @Override public void onMessage(WebSocket webSocket, String text) { super.onMessage(webSocket, text); // 收到消息 } @Override public void onMessage(WebSocket webSocket, ByteString bytes) { super.onMessage(webSocket, bytes); // 收到二进制消息 } @Override public void onClosing(WebSocket webSocket, int code, String reason) { super.onClosing(webSocket, code, reason); // 正在关闭连接 } @Override public void onClosed(WebSocket webSocket, int code, String reason) { super.onClosed(webSocket, code, reason); // 连接已关闭 } @Override public void onFailure(WebSocket webSocket, Throwable t, Response response) { super.onFailure(webSocket, t, response); // 连接失败 } } ``` 使用方法: ```java WebSocketClient client = new WebSocketClient(); client.start(); ``` 注意:需要在AndroidManifest.xml中添加网络权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值