Netty-Socketio使用
1.添加依赖
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.18</version>
</dependency>
2.配置
2.1 配置 redisson
略,前面有redisson的博文,我介绍过。
2.2 配置socketio的Configuration
public Configuration getConfig(){
Configuration config = new Configuration();
config.setHostname("localhost");
config.setPort(9092);
InputStream ssl = WebSocketServer.class.getResourceAsStream(jksPath);//证书地址
config.setPort.setKeyStore(ssl);
final SocketIOServer server = new SocketIOServer(config);
}
2.3 注册监听器
注册连接监听器与断开监听器
void addListener() {
socketServer.addConnectListener(new ConnectListener() {
@Override
public void onConnect(SocketIOClient socketIOClient) {
connectThreadPool.submit(new Runnable() {
@Override
public void run() {
HandshakeData handshakeData = socketIOClient.getHandshakeData();
// 消息接收方
String system = handshakeData.getSingleUrlParam(HandshakeParamsDTO.FROM);
socketIOClient.joinRoom(system);
// 将用户信息存到缓存
}
});
}
});
socketServer.addDisconnectListener(new DisconnectListener() {
@Override
public void onDisconnect(SocketIOClient socketIOClient) {
disconnectThreadPool.submit(new Runnable() {
@Override
public void run() {
//从缓存删除用户信息
}
});
}
});
}
2.4 启动/断开服务
- 启动socketServer.start();
- 断开socketServer.stop();
2.5 发消息
单个发送:
public void sendMessageToUser(WebSocketDataDTO message) {
Packet packet = new Packet(PacketType.MESSAGE);
packet.setData(message.getMessage());
String sessionId = redisHelper.getSessionIdOfUser(message); // 从缓存取出用户信息
if(!StringUtils.isBlank(sessionId)) {
socketServer.getClient(UUID.fromString(sessionId)).send(packet, new AckCallback<AckResult>(AckResult.class) {
@Override
public void onSuccess(AckResult result) {
}
});
}
}
广播发送:
public void sendRoomMessage(WebSocketDataDTO message) {
if(StringUtils.isBlank(message.getTo())) {
Packet packet = new Packet(PacketType.MESSAGE);
packet.setData(message.getMessage());
socketServer.getRoomOperations(message.getTo()).send(packet);
}
}