首页 > 编程语言 >Java WebSocket客户端

Java WebSocket客户端

时间:2023-04-21 20:11:43浏览次数:44  
标签:Java WebsocketClient void myClient message WebSocket logger public 客户端

https://www.cnblogs.com/SjhCode/p/WebSocketClient.html

注意事项:

1.@Scheduled(fixedDelay = 5000)

2.心跳检测

3.导入依赖与导包

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

import org.java_websocket.client.WebSocketClient;

import org.java_websocket.handshake.ServerHandshake;

 

以下这个类直接复制就可以

复制代码
/**
 * @author jianhan
 * @Description: WebsocketClient客户端
 * @date 2022/11/7 16:56
 */
public class WebsocketClient extends WebSocketClient {
    private static Logger logger = LoggerFactory.getLogger(WebsocketClient.class);

    public WebsocketClient(URI url) {
        super(url);
    }

    @Override
    public void onOpen(ServerHandshake shake) {
        logger.info("握手...");
        for(Iterator<String> it = shake.iterateHttpFields(); it.hasNext();) {
            String key = it.next();
            logger.info(key+":"+shake.getFieldValue(key));
        }
    }

    @Override
    public void onMessage(String paramString) {
        logger.info("接收到消息:"+paramString);
        //以下为业务逻辑处理
        SocketClient socketClient = new SocketClient();
        socketClient.message(paramString);
    }


    @Override
    public void onClose(int paramInt, String paramString, boolean paramBoolean) {
        logger.info("关闭...");
    }

    @Override
    public void one rror(Exception e) {
        logger.error("异常"+e);
    }
}
复制代码

 

第二个类,逻辑处理

复制代码
/**
 * @author jianhan
 * @Description: WebsocketClient客户端
 * @date 2022/11/7 17:02
 */
@Component
public class SocketClient {
    private static Logger logger = LoggerFactory.getLogger(SocketClient.class);

    @Resource
    private WebSocket webSocket;

    /**
     * @Description: 客户端建立连接
     * @Param:
     * @return:
     * @Author: jianhan
     * @Date: 2022-11-08 09:58:57
     **/
    @Scheduled(fixedDelay = 5000)
    public static void client() {
        try {
            WebsocketClient myClient = new WebsocketClient(new URI("ws://127.0.0.1:8001/webSocket"));
            myClient.connect();
            if (!myClient.getReadyState().equals(ReadyState.OPEN) && !myClient.isOpen()) {
                System.out.println("连接中。。。");
                Thread.sleep(1000 * 5);
            }
            // 连接成功往websocket服务端发送数据
            myClient.send("初始化连接成功");
            healthCheck(myClient);//心跳检测
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @Description: 心跳检测
     * @Param:
     * @return:
     * @Author: jianhan
     * @Date: 2022-11-11 09:20:03
     **/
    public static void healthCheck(WebsocketClient websocketClient) {
        try {
            while (true) {
                logger.info("进入心跳检测");
                if (websocketClient.getReadyState().equals(ReadyState.OPEN)) {
                    websocketClient.send("ping");
                    try {
                        Thread.sleep(1000 * 60 * 20);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else {
                    websocketClient.connect();
                }
            }
        } catch (Exception e) {
            logger.error("客户端心跳消息发送异常");
            e.printStackTrace();
        }
    }

    /**
     * @Description: 处理接收的数据
     * @Param: message
     * @return:
     * @Author: jianhan
     * @Date: 2022-11-07 17:36:49
     **/
    public void message(String message) {
        logger.info("message:" + message);
        String string = JSON.toJSONString(message);
        Map map = (Map) JSON.parse(string);
       //以下业务代码
    }
}
复制代码

 

以下为选择复制

4.websocket本身有重连机制,设置心跳检测可以延缓时间,可以不设置心跳检测,不过在client()中要if要改为while,并且在while中调client()。

while (!myClient.getReadyState().equals(ReadyState.OPEN) && !myClient.isOpen()) {
                System.out.println("连接中。。。");
                Thread.sleep(1000 * 5);
             client() 
 }    

标签:Java,WebsocketClient,void,myClient,message,WebSocket,logger,public,客户端
From: https://www.cnblogs.com/chuangsi/p/17341637.html

相关文章

  • java中有关于时间格式以及定时器遇到的问题
    https://www.cnblogs.com/SjhCode/p/time.html时间格式这个是通过Calendar做时间滚动 //开始时间yyyy-MM-ddHH:mm:ss@Value("${StartTime}")@JsonFormat(timezone="GMT+8",pattern="yyyy-MM-ddHH:mm:ss")@DateTimeFormat(pattern="yyyy-MM-......
  • Java-Day-13(抽象类 + 接口 + 内部类)
    Java-Day-13抽象类(abstract)当父类的某些方法需要声明,但是又不确定如何实现时(主要在于子类的重写时),可以将其声明为抽象方法,那么这个类就是抽象类所谓抽象方法就是没有实现的方法,而所谓没有实现就是指没有方法体当一个类中存在抽象方法时,需要将该类声明为abstract......
  • Java学习笔记(三)
    1.  请描述你理解的循环按照一定次数重复地执行程序,直至达到次数上限,将重复的代码只编写一次,然后再重复执行即可,这样的程序结构就是循环结构。2.  请描述嵌套for循环执行的过程嵌套循环是先执行外层循环,然后再执行内层循环。外层循环执行一次,内层执行若干次,当内层执行完......
  • ruoyi整合WebSocket
    https://www.cnblogs.com/SjhCode/p/WebSocket.html ruoyi整合WebSocket这里使用WebSocket目的:向前端推送实时消息,配合ActiveMQ接入三方使用的导入maven依赖 <!--WebSocket--><dependency><groupId>org.java-websocket</groupId><......
  • 老杜 JavaWeb 讲解(四) ——Servlet编写JDBC连接数据库
    老杜 JavaWeb 讲解对应视频:08-servlet中编写jdbc程序连接数据库(六)在Servlet(Java小程序)中编写JDBC连接数据库6.1JDBC介绍:JDBC的全称是Java数据库连接(JavaDatabaseconnect),它是一套用于执行SQL语句的JavaAPI。[1]JDBC(JavaDataBaseConnectivity)是Java编程语言中......
  • mac M2 设置JAVA_HOME不生效
    1.打开终端2.如果不存在可以使用touch.bash_profile创建一个新文件3.复制一下内容,惟一要更改的是版本号open-e.bash_profileJAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/HomePATH=$JAVA_HOME/bin:$PATH:.CLASSPATH=$JAVA_HOME/lib/tool......
  • java 字符串切割
    1、根据特定的字符,切割整个字符串放置到数组中。1Stringstr="这是,一个,数字,1234567";2String[]split=str.split(",");3for(inti=0;i<split.length;i++){4System.out.println(split[i]);5} 2、字符串......
  • CentOS 7安装配置SSR客户端
    CentOS7安装配置SSR客户端1.安装配置SSR客户端#wgethttps://raw.githubusercontent.com/biutefo/dabaobei/main/ssr.sh1.1安装SSR客户端由于博客平台对关键字过滤,如下SSR代替如下字符:安装epel扩展源采用Python包管理工pip安装。sudoyum-yinstallepel-release......
  • Java8更新Java11, 修复使java11环境生效
     原因:jenkins安装新版本时发现不支持java8了,需要手动删除旧的8更新到11,再配置环境变量.报错:jenkins:invalidJavaversion:openjdkversion"1.8.0_312" 1.先卸载旧的java8dnfremovejava 2.安装装版本java11yuminstall-yfontconfigjava-11-openjdkjava-1......
  • 常用的Java开发工具IDEA、eclipse比较
    常用的Java开发工具比较​ 市场上Java开发常用的编辑器可谓是琳琅满目,令人眼花缭乱,甚至让人难以抉择。所以今天挑选了几款主流的编辑器进行介绍,都是功能比较丰富的IDE,至于大神使用的普通文本编辑器就不再此次考虑范围内,主要介绍IntelliJIDEA、Eclipse、NetBeans、VisualStudi......