compile 'com.squareup.okhttp3:okhttp:3.8.1'

compile 'com.squareup.okhttp3:mockwebserver:3.8.1'

布局文件

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/activity_main"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.yinzhendong.websocket.MainActivity">

<ScrollView

android:layout_width="match_parent"

android:layout_height="wrap_content">

<LinearLayout

android:layout_marginLeft="20dp"

android:layout_marginRight="20dp"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:orientation="vertical">

<Button

android:id="@+id/start"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:text="连接"

android:textSize="17sp"/>

<TextView

android:id="@+id/output"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:textSize="16sp"/>

</LinearLayout>

</ScrollView>

</RelativeLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private Button btnStart;

private TextView tvOutput;

private WebSocket mSocket;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btnStart = (Button) findViewById(R.id.start);

tvOutput = (TextView) findViewById(R.id.output);

btnStart.setOnClickListener(this);

}

private void start() {

OkHttpClient mOkHttpClient = new OkHttpClient.Builder()

.readTimeout(3, TimeUnit.SECONDS)//设置读取超时时间

.writeTimeout(3, TimeUnit.SECONDS)//设置写的超时时间

.connectTimeout(3, TimeUnit.SECONDS)//设置连接超时时间

.build();

Request request = new Request.Builder().url("ws://echo.websocket.org").build();

EchoWebSocketListener socketListener = new EchoWebSocketListener();

mOkHttpClient.newWebSocket(request, socketListener);

mOkHttpClient.dispatcher().executorService().shutdown();

}

/**

* @param v The view that was clicked.

*/

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.start://开始连接

start();

break;

}

}

private final class EchoWebSocketListener extends WebSocketListener {

@Override

public void onOpen(WebSocket webSocket, Response response) {

super.onOpen(webSocket, response);

mSocket = webSocket;

String openid = "1";

//连接成功后,发送登录信息

String message = "{\"type\":\"login\",\"user_id\":\""+openid+"\"}";

mSocket.send(message);

output("连接成功!");

}

@Override

public void onMessage(WebSocket webSocket, ByteString bytes) {

super.onMessage(webSocket, bytes);

output("receive bytes:" + bytes.hex());

}

@Override

public void onMessage(WebSocket webSocket, String text) {

super.onMessage(webSocket, text);

output("receive text:" + text);

//收到服务器端发送来的信息后,每隔25秒发送一次心跳包

final String message = "{\"type\":\"heartbeat\",\"user_id\":\"heartbeat\"}";

Timer timer = new Timer();

timer.schedule(new TimerTask() {

@Override

public void run() {

mSocket.send(message);

}

},25000);

}

@Override

public void onClosed(WebSocket webSocket, int code, String reason) {

super.onClosed(webSocket, code, reason);

output("closed:" + reason);

}

@Override

public void onClosing(WebSocket webSocket, int code, String reason) {

super.onClosing(webSocket, code, reason);

output("closing:" + reason);

}

@Override

public void onFailure(WebSocket webSocket, Throwable t, Response response) {

super.onFailure(webSocket, t, response);

output("failure:" + t.getMessage());

}

}

private void output(final String text) {

runOnUiThread(new Runnable() {

@Override

public void run() {

tvOutput.setText(tvOutput.getText().toString() + "\n\n" + text);

}

});

}

}

使用OkHttp3之Websocket实现长连接相关推荐

  1. html5 长链接,Vue通过WebSocket建立长连接,连接

    Vue通过WebSocket建立长连接,连接 使用场景: 在项目开发中,后端需要处理一连串的逻辑,或者等待第三方的数据返回来进行处理之后在返回给前端,可能时间会很长,而且前端也不知道后端什么时候能处理 ...

  2. Android的autobahn框架使用实例:实现WebSocket的长连接

    Android的autobahn框架使用实例:实现WebSocket的长连接 WebSocket三方框架: 01.Java-WebSocket:存在断开之后无法重新连接的问题 02.autobahn: ...

  3. http、websocket、长连接、短连接(一)

    http.websocket.长连接.短连接(一) http.websocket.长连接.短连接(二) 这一篇先讲一下http的长短连接的问题 1. HTTP协议与TCP/IP协议的关系 HTTP的长 ...

  4. python长连接框架_python之websocket【长连接的实现】

    websocket技术简单来说就是实现了长连接的技术,相对于传统的ajax或者轮询,websocket主要实现了双通信,并且减少了长轮询的多次请求的时间.总的来说,在很多应用上面能够发挥更好的作用,比 ...

  5. Spring MVC使用webSocket保持长连接

    说明 客户端需要与服务器保持长连接 配置 在pom.xml中加入包依赖 <!-- webSocket start Add by zhangxueliang 2019-02-22 -->&l ...

  6. websocket 实现长连接原理

    一.前文介绍 WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是 ...

  7. 不要小看 WebSocket!长连接、有状态、双向、全双工都是王炸技能

    MQTT 是一种长连接的技术,所谓的长连接,就是保持长久的连接,每次连接可以传输多次数据,并且连接双方有保活机制维持连接.就好比异地办公室一样,有台设备一直保持在线,有问题需要沟通的时候,通过这台一直 ...

  8. 石墨文档Websocket百万长连接技术实践

    内容简介:Web 服务端推送技术经过了长轮询.短轮询的发展,最终到 HTML5 标准带来的 WebSocket 规范逐步成为了目前业内主流技术方案.它使得消息推送.消息通知等功能的实现变得异常简单,那 ...

  9. Websocket 百万长连接技术,在石墨文档中的实践

    今日推荐 推荐一个 Java 接口快速开发框架干掉Random:这个类已经成为获取随机数的王者Docker + Intellij IDEA,提升 10 倍生产力!笑出腹肌的注释,都是被代码耽误的诗人! ...

最新文章

  1. hadoop hbase维护问题总结
  2. 使用 Microsoft .NET Framework 精简版中的 MessageWindow 类
  3. 微信小程序image组件开发程序以及相关图片问题参考资料汇总
  4. 使用Git工具下载android源码---带步骤
  5. c++构造函数成员初始化中赋值和初始化列表两种方式的区别
  6. python3.7安装pyspider安装教程_Windows环境下Python3安装Pyspider
  7. Apache旗下顶级开源盛会 HBasecon Asia 2018将于8月在京举行
  8. jsp----中文乱码
  9. 电子产品环境可靠性测试标准有哪些?
  10. python抓取贴吧_Python抓取图片(贴吧)
  11. 计算机网络实验:常用网络命令的使用(ping、ipconfig、netstat、tracert、arp)
  12. 最长单调递增子序列问题 设计一个O(n2)复杂度的算法,找出由n个数组成的序列的最长单调递增子序列
  13. deepfake 图片_找到那张假照片!对抗Deepfake之路
  14. Windows 10简单搭建一个局域网Web下载分享界面
  15. 学习笔记——计组—流水线
  16. CAD/CAM/CAE基础(四) CAM
  17. 自己做小程序开个社区团购可行吗?
  18. 脚手架的这个好搭档 今天要重点来介绍下!
  19. buck电路上下管_分时供电全桥Buck型双输入直流变换器
  20. javascript 自己主动绑定JS callback 的方法函数

热门文章

  1. 用AfxExtractSubString()解析复合串
  2. GetLastError编号含义
  3. Android--制作开场动画/MediaPlayer OnCompletionListener
  4. android屏幕底部黑块,Android surfaceView 黑块问题
  5. python3 列表倒叙_python的列表、元组、字典、集合
  6. 电脑上的科学计算机怎么用,电脑上怎么快速打开计算器
  7. jakarta_迁移到Jakarta EE 9
  8. jmeter全局变量传参_Jmeter 将正则表达式提取的参数传给全局(跨线程组使用变量)...
  9. oracle 数据不可恢复,Oracle数据恢复:错误叠加导致灾难不可恢复解决办法
  10. Java 9 - 17 特性解读:Java 9