用okhttp实现webSocket长连接
来源:互联网 发布:手机扫描条码软件 编辑:程序博客网 时间:2024/04/30 11:07
因为项目需求极光不能满足当前推送量,只能寻别的改决方法。想到了webSocket,
Okhttp支持webSocket协议。
上代码:
在 build.gradle 配制 okhttp依赖
compile 'com.squareup.okhttp3:okhttp:3.4.1'
加入网络权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
java 代码
创建一OkHttpClient 对像
final static OkHttpClient mOkHttpClient = new OkHttpClient.Builder() .readTimeout(3000, TimeUnit.SECONDS)//设置读取超时时间 .writeTimeout(3000, TimeUnit.SECONDS)//设置写的超时时间 .connectTimeout(3000, TimeUnit.SECONDS)//设置连接超时时间 .build();
设置webSocket连接,回调
url地址改成自已服务端的地址<pre name="code" class="java">String url="ws://10.0.0.20:8080/hyt/websocket.do?userId=1&userType=2"; //改成自已服务端的地址 Request request = new Request.Builder().url(url).build(); WebSocketCall webSocketCall = WebSocketCall.create(mOkHttpClient, request); webSocketCall.enqueue(new WebSocketListener() { private final ExecutorService sendExecutor = Executors.newSingleThreadExecutor(); private WebSocket webSocket; @Override public void onOpen(WebSocket webSocket, Response response) { Log.d("WebSocketCall", "onOpen"); this.webSocket=webSocket; } /** * 连接失败 * @param e * @param response Present when the failure is a direct result of the response (e.g., failed * upgrade, non-101 response code, etc.). {@code null} otherwise. */ @Override public void onFailure(IOException e, Response response) { Log.d("WebSocketCall","onFailure"); } /** * 接收到消息 * @param message * @throws IOException */ @Override public void onMessage(ResponseBody message) throws IOException { final RequestBody response; Log.d("WebSocketCall", "onMessage:" + message.source().readByteString().utf8()); if (message.contentType() == WebSocket.TEXT) {// response = RequestBody.create(WebSocket.TEXT, "你好");//文本格式发送消息 } else { BufferedSource source = message.source(); Log.d("WebSocketCall", "onMessage:" + source.readByteString()); response = RequestBody.create(WebSocket.BINARY, source.readByteString()); } message.source().close(); sendExecutor.execute(new Runnable() { @Override public void run() { try { Thread.sleep(1000*60); webSocket.sendMessage(response);//发送消息 } catch (IOException e) { e.printStackTrace(System.out); } catch (InterruptedException e) { e.printStackTrace(); } } }); } @Override public void onPong(Buffer payload) { Log.d("WebSocketCall", "onPong:"); } /** * 关闭 * @param code The <a href="http://tools.ietf.org/html/rfc6455#section-7.4.1">RFC-compliant</a> * status code. * @param reason Reason for close or an empty string. */ @Override public void onClose(int code, String reason) { sendExecutor.shutdown(); } });
连接成功会回调onOpen()方法,可以拿到WebSocket对像,连接失败回调onFailure()方法,
服务端推送消息,我们可以通过onMessage()方法接收,同时我们也可以通过WebSocket对像的sendMessage方法给服务端发送消息。
以上完成
原码下载地址:http://download.csdn.net/detail/tong6320555/9611640
0 0
- 用okhttp实现webSocket长连接
- okhttp实现websocket长连接
- 使用OkHttp之Websocket实现长连接
- tomcat websocket 长连接实现
- WebSocket原理及如何实现长连接
- golang websocket长连接
- IOS webSocket 长连接
- WebSocket长连接
- #长连接#WebSocket\长连接\轮询
- Android 实现H5,WAMP,用WebSocket与Android 客户端进行长连接
- HTML5 中websocket长连接的具体实现方法
- HTML5 中websocket长连接的具体实现方法
- 基于spring websocket+sockjs实现的长连接请求
- 基于Spring Websocket+SockJS实现的长连接请求
- android 通过WebSocket 实现长连接通讯消息
- HTML5 中websocket长连接的具体实现方法
- java与微信小程序实现websocket长连接
- OkHttp实现分析之Websocket
- 发现一个总结的非常全面的android开源框架
- Mysql中的explain执行计划详解(1)
- 清除代码异味
- 数组的详细总结
- iOS开发,定时器的使用
- 用okhttp实现webSocket长连接
- BASE64编码
- git 分支
- c 求素数的一般方法
- int 0x13 中断理解
- Android 引用完整工程包括Activity和资源文件
- Android 侧滑菜单(DrawerLayout+ToolBar的使用)
- 常用js模板代码-模块化
- 栈和队列面试题(四)