java 实现websocket当客户端连接服务器以及自动重连的方式

不是项目用到了 也不会去研究这个东西 首先引入jar包 目前的最新版本是1.5.2

GetHub源码地址:GitHub - TooTallNate/Java-WebSocket: A barebones WebSocket client and server implementation written in 100% Java.

        <dependency>
            <groupId>org.java-websocket</groupId>
            <artifactId>Java-WebSocket</artifactId>
            <version>1.5.2</version>
        </dependency> 

 

首先是websocket的搭建 这个可以说是非常简单的了 直接上代码 没啥好说的 

package com.config;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.beans.factory.annotation.Autowired;

import java.net.URI;
public class MyWebSocketClient extends WebSocketClient {public static boolean WEBSTATUS = false;

  //连接 public MyWebSocketClient(URI serverUri) { super(serverUri); }
  //打开连接 @Override public void onOpen(ServerHandshake serverHandshake) { WEBSTATUS = true; } @Override public void onMessage(String s) { //接收消息 } @Override public void onClose(int i, String s, boolean b) { WEBSTATUS = false; } @Override public void one rror(Exception e) { WEBSTATUS = false; }   
  //推送消息 public void sendMsg(String msg){ if(WEBSTATUS){ send(msg); } } }

这里面有个参数  WEBSTATUS  这个是用来记录当前websocket的状态的 因为是作为客户端 就不考虑多个的问题

然后 就是重点了 自动重连

@Bean
    public WebSocketClient webServiceClient() {
        try {
            MyWebSocketClient mWebSocketClient = new MyWebSocketClient(new URI("ws://127.0.0.1:8080/websocket"));
            mWebSocketClient.connect();
            //如果断线,则重连并重新发送验证信息
            Timer t = new Timer();
            t.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    if (!MyWebSocketClient.WEBSTATUS) {
                        try {
                            MyWebSocketClient mWebSocketClient = new MyWebSocketClient(new URI("ws://127.0.0.1:8080/websocket"));
                            mWebSocketClient.connect();
                        } catch(URISyntaxException e){
                            e.printStackTrace();
                        }
                    }
                }
            },2000,5000);//5秒执行一次 然后休息2秒
            return mWebSocketClient;
        } catch(URISyntaxException e){
            e.printStackTrace();
        }
        return null;
    }

首先是实例化对象 设置服务器websocket的地址 然后connect() 连接

连接成功后会调用onOpen 这时候会把状态改为true 表示已经连接上 

如果没连接上服务器 或者服务器断开和连接异常 那么状态会变为false 

线程里面的方法会每隔7秒左右执行一次 执行的时候会根据状态判断是否需要连接websocket

这样子就实现了websocket客户端自动重连

上一篇:Arduino网络编程实战-Ethernet篇-WebSocket服务器


下一篇:带心跳的websocket