【tio-websocket】3、tio-websocket-server实现任何地方都能对用户发送消息

文凯康
2023-12-01

上一篇文章中,咱们已经成功搭建了咱们的 websocket 服务器,并能够与服务器之间成功通信,本篇文章将带领大家实现任何地方都能对用户发送消息

1、原理解析

tio-websocket-server 中对用户发送消息的方法如下:

Tio.sendToUser(channelContext.tioConfig, userId, wsResponse);
  • channelContext.tioConfig,指整个 websocket 的配置信息,可以通过 ChannelContext.tioConfig 获取
  • userId:接收者 id
  • wsResponse:响应对象,类似于 httpServletResponse

我们在消息处理类 MyWsMsgHandler 中很轻松获得 ChannelContext 对象,我们就可以静态调用 Tio 的各种 api 了

但是,如果不是在 消息处理类 MyWsMsgHandler 中,我们就获取不到 ChannelContext 对象,我们就需要在 websocket 配置类中将 ServerTioConfig 定义为全局变量,这样我们在任何地方都能实现发送消息了

2、改造 websocket 配置类

import com.asurplus.tio.websocket.handle.MyWsMsgHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.tio.server.ServerTioConfig;
import org.tio.websocket.server.WsServerStarter;

import java.io.IOException;

/**
 * websocket 配置类
 */
@Configuration
public class WebSocketConfig {

    /**
     * 注入消息处理器
     */
    @Autowired
    private MyWsMsgHandler myWsMsgHandler;

    /**
     * TIO-WEBSOCKET 配置信息
     */
    public static ServerTioConfig serverTioConfig;

    /**
     * 启动类配置
     *
     * @return
     * @throws IOException
     */
    @Bean
    public WsServerStarter wsServerStarter() throws IOException {
        // 设置处理器
        WsServerStarter wsServerStarter = new WsServerStarter(6789, myWsMsgHandler);
        // 获取到ServerTioConfig
        serverTioConfig = wsServerStarter.getServerTioConfig();
        // 设置心跳超时时间,默认:1000 * 120
        serverTioConfig.setHeartbeatTimeout(1000 * 120);
        // 启动
        wsServerStarter.start();
        return wsServerStarter;
    }
}

这样,我们就定义了一个全局变量 serverTioConfig,在需要使用的地方,只需要 WebSocketConfig.serverTioConfig 就能拿到

3、使用示范

Tio.sendToUser(WebSocketConfig.serverTioConfig, "1", wsResponse);
Tio.sendToGroup(WebSocketConfig.serverTioConfig, "1234", wsResponse);

这样我们就能在任何地方拿到 websocket 配置信息,对用户 或者 群组 发送消息了

如您在阅读中发现不足,欢迎留言!!!

 类似资料: