上一篇文章中,咱们已经成功搭建了咱们的 websocket 服务器,并能够与服务器之间成功通信,本篇文章将带领大家实现任何地方都能对用户发送消息
tio-websocket-server 中对用户发送消息的方法如下:
Tio.sendToUser(channelContext.tioConfig, userId, wsResponse);
我们在消息处理类 MyWsMsgHandler 中很轻松获得 ChannelContext 对象,我们就可以静态调用 Tio 的各种 api 了
但是,如果不是在 消息处理类 MyWsMsgHandler 中,我们就获取不到 ChannelContext 对象,我们就需要在 websocket 配置类中将 ServerTioConfig 定义为全局变量,这样我们在任何地方都能实现发送消息了
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 就能拿到
Tio.sendToUser(WebSocketConfig.serverTioConfig, "1", wsResponse);
Tio.sendToGroup(WebSocketConfig.serverTioConfig, "1234", wsResponse);
这样我们就能在任何地方拿到 websocket 配置信息,对用户 或者 群组 发送消息了
如您在阅读中发现不足,欢迎留言!!!