使用OkHttp之Websocket实现长连接
2017-08-31 11:06
453 查看
最近因为项目中用到了长连接,本来打算使用Socket,无意间发现了Websocket,实现起来很方便。
首先在在build.gradle中添加对Okhttp的支持
布局文件
MainActivity.java
首先在在build.gradle中添加对Okhttp的支持
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); } }); } }
相关文章推荐
- 使用四种框架分别实现1百万websocket常连接的服务器
- WebSocket 是什么原理?为什么可以实现持久连接?什么情况使用WebSocket
- 使用四种框架分别实现百万websocket常连接的服务器
- 使用四种框架分别实现百万websocket常连接的服务器
- 最通俗易懂的使用OkHttp进行WebSocket连接教程:上来直接撸代码
- 使用四种框架分别实现百万websocket常连接的服务器
- 使用四种框架分别实现百万websocket常连接的服务器--转
- 使用四种框架分别实现百万websocket常连接的服务器
- 使用四种框架分别实现1百万websocket常连接的服务器
- 最通俗易懂的使用OkHttp进行WebSocket连接教程:上来直接撸代码
- 使用四种框架分别实现1百万websocket常连接的服务器
- 使用php的swoole框架,实现高性能长连接websocket
- 使用四种框架分别实现1百万websocket常连接的服务器
- 使用四种框架分别实现百万websocket常连接的服务器
- 使用四种框架分别实现百万websocket常连接的服务器
- 使用四种框架分别实现百万websocket常连接的服务器{转}
- 使用四种框架分别实现百万websocket常连接的服务器
- 使用四种框架分别实现1百万websocket常连接的服务器
- 使用TransactionScope实现单数据库连接事务操作
- 使用 .NET 实现 Ajax 长连接 (Part 2 - Mutex Wait & Signal)