tio websocket 客户端 java 代码 工具类

为了更好地组织代码并提高可复用性,我们可以将WebSocket客户端封装成一个工具类。这样可以在多个地方方便地使用WebSocket客户端功能。以下是使用tio库实现的一个WebSocket客户端工具类。

  1. 添加依赖

确保项目中添加了tio的依赖。如果使用的是Maven,可以在pom.xml文件中添加以下依赖:

复制代码
<dependencies>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>tio-core</artifactId>
        <version>2.1.10</version>
    </dependency>
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>tio-websocket</artifactId>
        <version>2.1.10</version>
    </dependency>
</dependencies>
  1. 创建WebSocket客户端工具类

创建一个工具类TioWebSocketClientUtil,用于管理WebSocket客户端的连接和消息发送。

复制代码
import org.tio.client.AioClient;
import org.tio.client.intf.ClientAioListener;
import org.tio.core.ChannelContext;
import org.tio.core.intf.Packet;
import org.tio.websocket.client.WsClientConfig;
import org.tio.websocket.client.intf.ClientWsAioListener;
import org.tio.websocket.common.WsPacket;

import java.nio.charset.StandardCharsets;
import java.util.concurrent.CountDownLatch;

public class TioWebSocketClientUtil {

    private static final String SERVER_URL = "ws://your-spring-boot-server-url/websocket-endpoint";
    private static final int PORT = 8080; // 服务器端口
    private static final CountDownLatch latch = new CountDownLatch(1);
    private static AioClient aioClient;

    public static void init() throws Exception {
        WsClientConfig config = new WsClientConfig();
        config.setHeartbeatTimeoutSeconds(60); // 心跳超时时间

        ClientWsAioListener aioListener = new ClientWsAioListener() {
            @Override
            public void onAfterConnected(ChannelContext channelContext, boolean isConnected, boolean isReconnect, boolean isFromHeartbeat) throws Exception {
                super.onAfterConnected(channelContext, isConnected, isReconnect, isFromHeartbeat);
                System.out.println("WebSocket connection opened.");
                latch.countDown();
            }

            @Override
            public void onAfterClosed(ChannelContext channelContext, Throwable throwable, String s, String s1) throws Exception {
                super.onAfterClosed(channelContext, throwable, s, s1);
                System.out.println("WebSocket connection closed.");
            }

            @Override
            public void onAfterSent(ChannelContext channelContext, Packet packet, boolean isSentSuccess) throws Exception {
                super.onAfterSent(channelContext, packet, isSentSuccess);
                System.out.println("Message sent: " + packet);
            }

            @Override
            public void onAfterReceivedBytes(ChannelContext channelContext, byte[] bytes, int len) throws Exception {
                super.onAfterReceivedBytes(channelContext, bytes, len);
                System.out.println("Received bytes: " + new String(bytes, StandardCharsets.UTF_8));
            }

            @Override
            public void onAfterReceivedPacket(ChannelContext channelContext, Packet packet) throws Exception {
                super.onAfterReceivedPacket(channelContext, packet);
                if (packet instanceof WsPacket) {
                    WsPacket wsPacket = (WsPacket) packet;
                    System.out.println("Received message: " + wsPacket.getString());
                }
            }
        };

        aioClient = new AioClient(config, aioListener);
        aioClient.start();
    }

    public static void connect() throws Exception {
        aioClient.connect(SERVER_URL, "client", PORT, null, null, 5000);
        latch.await(); // 等待连接成功
    }

    public static void sendMessage(String message) throws Exception {
        WsPacket wsPacket = new WsPacket();
        wsPacket.setString(message);
        aioClient.send(wsPacket);
    }

    public static void close() throws Exception {
        aioClient.stop();
    }

    public static void main(String[] args) throws Exception {
        init();
        connect();

        // 发送消息
        sendMessage("Hello, server!");

        // 等待一段时间后关闭连接
        Thread.sleep(10000);
        close();
    }
}
  1. 解释

TioWebSocketClientUtil 类:封装了WebSocket客户端的基本功能。

init 方法:初始化WebSocket客户端配置并启动客户端。

connect 方法:连接到WebSocket服务器。

sendMessage 方法:发送消息给服务器。

close 方法:关闭客户端连接。

main 方法:演示如何使用这个工具类。

  1. 使用工具类

在其他类中可以通过调用TioWebSocketClientUtil的方法来使用WebSocket客户端功能:

复制代码
public class MainApp {
    public static void main(String[] args) {
        try {
            TioWebSocketClientUtil.init();
            TioWebSocketClientUtil.connect();
            
            // 发送消息
            TioWebSocketClientUtil.sendMessage("Hello, server!");
            
            // 等待一段时间后关闭连接
            Thread.sleep(10000);
            TioWebSocketClientUtil.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

通过这种方式,可以将WebSocket客户端功能封装成一个工具类,方便在多个地方使用。这样不仅提高了代码的可复用性,也使得客户端的管理和维护更加方便。

相关推荐
24zhgjx-lxq29 分钟前
华为ensp:MSTP
网络·安全·华为·hcip·ensp
ling___xi32 分钟前
《计算机网络》计网3小时期末速成课各版本教程都可用谢稀仁湖科大版都可用_哔哩哔哩_bilibili(笔记)
网络·笔记·计算机网络
REDcker42 分钟前
Linux 文件描述符与 Socket 选项操作详解
linux·运维·网络
Up九五小庞1 小时前
用arpspoof实现100%批量切断192.168.110.10 - 192.168.110.100 断网(双向欺骗)--九五小庞
网络·开源
躺柒1 小时前
读数字时代的网络风险管理:策略、计划与执行04风险指引体系
大数据·网络·信息安全·数字化·网络管理·网络风险管理
独角鲸网络安全实验室2 小时前
本地信任成“致命漏洞”:数千Clawdbot Agent公网裸奔,供应链与内网安全告急
网络·网关·安全·php·漏洞·clawdbot·信任机制漏洞
ai_xiaogui2 小时前
Tailscale实现家庭与公司网络双向通信教程:子网路由配置详解
网络·tailscale·双向通信·子网路由配置详解·tailscale双向互访
mftang2 小时前
现代互联网安全的基石: SSL/TLS技术介绍
服务器·网络·ssl
坐怀不乱杯魂3 小时前
Linux网络 - 网络层
linux·服务器·网络
Teame_3 小时前
渗透课程学习总结
网络·安全·web安全