Android webSocket(okhttp-4.9.0)

开发过程,部分需要webSocket,这里使用 okhttp 自带socket。

一、依赖:com.squareup.okhttp3:okhttp:4.9.0

二、创建webSocket

1、创建okhttpClient和Request

public void init(){
		//初始化okhttpClient
        mBuilder = new OkHttpClient.Builder();
        //设置读取超时时间
        mBuilder.readTimeout(120, TimeUnit.SECONDS);
        //设置写的超时时间
        mBuilder.writeTimeout(120, TimeUnit.SECONDS);
        //设置连接超时时间
        mBuilder.connectTimeout(120, TimeUnit.SECONDS);
        //心跳时间
        mBuilder.pingInterval(10,TimeUnit.SECONDS);
        mOkHttpClient = mBuilder.build();
		
		//初始化request 
		mRequest = new Request.Builder().url(socketUrl).build();
}
	

2、创建webSocket并获取socket对象

public void connect(){
		mWebSocket = mOkHttpClient.newWebSocket(mRequest, new WebSocketListener() {
                @Override
                public void onOpen(final WebSocket webSocket, final Response response) {
                    super.onOpen(webSocket, response);
                    //socket 连接成功(需要自己切换到主线程)
                }

                @Override
                public void onMessage(WebSocket webSocket, final String text) {
                    super.onMessage(webSocket, text);
                   //socket 获取String 类型数据(需要自己切换到主线程)
                }

                @Override
                public void onMessage(WebSocket webSocket, ByteString bytes) {
                    super.onMessage(webSocket, bytes);
					//socket 获取ByteString 类型数据(需要自己切换到主线程)
                }

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

                @Override
                public void onClosed(final WebSocket webSocket, final int code, final String reason) {
                    super.onClosed(webSocket, code, reason);
					//释放连接
                    
                }

                @Override
                public void onFailure(final WebSocket webSocket, final Throwable t, final Response response) {
                    super.onFailure(webSocket, t, response);
                    //其他异常,都会执行这个方法
                }
            });
        }
	}

三、数据交互 mWebSocket.send(msg);

四、关闭webSocket

如果只是关闭连接可采用:

1、mWebSocket.close(code,reason),则WebSocketListener.onClosed()会被调用。这里需要注意是code码,不可以随便传递。可以参考文档 https://tools.ietf.org/html/rfc6455#section-7.4

2、mWebSocket.cancel(),则WebSocketListener.onFailure()会被调用

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Netty是一个基于Java的异步事件驱动的网络应用框架,它提供了一系列易于使用的API,用于创建高性能、可扩展的网络服务器和客户端应用程序。 WebSocket是一种在单个TCP连接上进行全双工通信的协议,它允许服务器主动向客户端推送数据,而不需要客户端先发起请求。在Java中,Netty提供了对WebSocket的支持,可以通过Netty来实现WebSocket服务器和客户端。 当使用Netty实现WebSocket时,Sec-WebSocket-Protocol是WebSocket握手过程中的一个HTTP头部字段,它用于指定客户端和服务器之间通信所使用的子协议。子协议是在WebSocket连接建立后,用于在双方之间传输数据的协议。 在Netty中,可以通过设置`WebSocketServerProtocolHandler`的`subprotocols`属性来指定支持的子协议。例如,可以使用以下代码来设置子协议为"chat": ```java ChannelPipeline pipeline = channel.pipeline(); pipeline.addLast(new HttpServerCodec()); pipeline.addLast(new HttpObjectAggregator(65536)); pipeline.addLast(new WebSocketServerCompressionHandler()); pipeline.addLast(new WebSocketServerProtocolHandler("/websocket", "chat")); pipeline.addLast(new MyWebSocketHandler()); ``` 在上面的代码中,`WebSocketServerProtocolHandler`的第二个参数就是Sec-WebSocket-Protocol的值,这里设置为"chat"。这样,当客户端与服务器进行握手时,可以指定"chat"作为子协议,在连接建立后双方就可以使用该子协议来进行通信。 希望这个回答对你有帮助!如果你还有其他问题,请继续提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值