继续上篇完善 Netty + Redis + Websocket IM 分布式集群实现
MyWebsocketHandler 更新代码
/**
* 处理客户端与服务端之间的websocket业务
*
* @param ctx ctx
* @param frame frame
*/
private void handWebsocketFrame(ChannelHandlerContext ctx, WebSocketFrame frame) {
// 判断是否是关闭websocket的指令
if (frame instanceof CloseWebSocketFrame) {
handshaker.close(ctx.channel(), ((CloseWebSocketFrame) frame).retain());
log.debug("接收到关闭websocket的指令");
}
// 判断是否是ping消息
if (frame instanceof PingWebSocketFrame) {
ctx.channel().write(new PongWebSocketFrame(frame.content().retain()));
log.debug("接收到ping消息");
return;
}
// 判断是否是二进制消息,如果是二进制消息,则抛出异常
if (!(frame instanceof TextWebSocketFrame)) {
log.error("目前不支持二进制消息");
throw new UnsupportedOperationException("【" + this.getClass().getName() + "】不支持的消息");
}
// 获取客户端向服务端发送的消息
String requestStr = ((TextWebSocketFrame) frame).text();
log.debug("服务端收到客户端的消息: {}", requestStr);
if (StringUtil.isNullOrEmpty(requestStr)){
return;
}
// 发布到redis 订阅列表中,进行广播
String keychannel = ctx.channel().id().asLongText();
//是否第一次连接上来
if (requestStr.startsWith("connect:")){
String udfromkey = requestStr.substring(requestStr.indexOf(