WebSocket服务
简要描述
- 提供通用的WebSocket服务,业务层集成后可以直接使用
WebSocket服务基础说明
//采用默认的配置方式启动
public void start()
//输入自定义的SimpleChannelInboundHandler启动
public void start( NettyTextWebSocketHandler myNettyTextWebSocketHandler )
- 通道组池,管理所有websocket连接 NettyChannelHandlerPool
根据ChannelHandlerContext、clientId 管理和获取链接对象
- 基础默认配置及常量 team.bangbang.common.net.websocket.NettyWebSocketConstatnts
public interface NettyWebSocketConstatnts {
String NETTY_SERVER_HOST = "0.0.0.0"; //默认监听地址
Integer NETTY_SERVER_PORT = 10086; //默认监听端口
String DEFAULT_WEB_SOCKET_LINK = "/WebSocket"; //默认服务地址
//##########################业务使用常量######################################
String NETTY_USER_CODE = "userCode"; //用户编号
String NETTY_USER_TERMINALTYPE = "terminalType"; //用户终端类型 web 还是 wechat
String NETTY_BUSSINESS_TYPE = "bussinessType"; //用户所在的业务类型
String TRIALCOMM_TERMINAL_TYPE_APP = "AppClient"; //用户APP客户端
String TRIALCOMM_TERMINAL_TYPE_PC = "PcClient"; //用户PC客户端
String TRIALCOMM_TERMINAL_TYPE_PCWEB = "PcWebClient"; //用户的PCWeb客户端
String TRIALCOMM_TERMINAL_TYPE_WECHAT = "WeChatClient"; //用户的WeChat客户端
}
- 基础NettyTextWebSocketHandler处理方法类
public void channelRead(ChannelHandlerContext ctx, Object msg) //用户登录处理
protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) //用户上报信息处理
private static void sendAllMessage(String message) //全部人员发送消息
public static boolean sendOneMessage(String userCode , String message) //单个用户发送消息
public static void sendListMessage(List<String> userCodes , String message) //群组发送消息
WebSocket服务业务使用说明
- 1、创建TaxMissNettyWebsocketServer业务服务类继承NettyWebsocketServer
@Component
public class TaxMissNettyWebsocketServer extends NettyWebsocketServer{
//如果需要使用自定义参数这里复写父类方法
}
- 2、创建TaxMissNettyTextWebSocketHandler业务处理类继承NettyTextWebSocketHandler
public class TaxMissNettyTextWebSocketHandler extends NettyTextWebSocketHandler{
//此处复写我们自己处理的方法
//接收到客户端发送的请求进行自己业务的处理
@Override
protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) {
log.info( " getClientMsg : " + msg.text() );
ctx.writeAndFlush( new TextWebSocketFrame("TaxMiss服务端收到消息!") );
}
}
- 2、在springboot项目启动类 添加异步启动方法,启动websocket服务
public class RuoYiApplication implements CommandLineRunner
{
public static void main(String[] args)
{
// System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args);
System.out.println("taxmiss 服务启动成功");
}
@Autowired
private TaxMissNettyWebsocketServer taxMissNettyWebsocketServer;
@Override
public void run(String... args) throws Exception {
TaxMissNettyTextWebSocketHandler taxMissNettyTextWebSocketHandler = new TaxMissNettyTextWebSocketHandler();
taxMissNettyWebsocketServer.start( taxMissNettyTextWebSocketHandler );
System.out.println("===========================TaxMissNettyWebsocketServer 启动成功============================================");
}
}
- 3、启动结果: 默认的 10086 端口已经 监听成功
13:39:38.913 [restartedMain] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-8080"]
13:39:39.116 [restartedMain] INFO o.q.c.QuartzScheduler - [start,547] - Scheduler quartzScheduler_$_NON_CLUSTERED started.
13:39:39.123 [restartedMain] INFO c.r.RuoYiApplication - [logStarted,61] - Started RuoYiApplication in 11.176 seconds (JVM running for 11.759)
13:39:39.124 [restartedMain] INFO t.b.c.n.w.NettyWebsocketServer - [runNettyWebScoketServer,69] - netty websocket start begin
13:39:39.145 [restartedMain] INFO t.b.c.n.w.NettyWebsocketServer - [runNettyWebScoketServer,109] - netty websocket start at port 10086
URL访问地址: ws://127.0.0.1:10086/WebSocket?terminalType=PcWebClient&userCode=ABCDEFG
参数说明:
terminalType 终端类型 (AppClient:app终端、PcClient:pc客户端 、PcWebClient:web客户端 、WeChatClient:小程序客户端)
userCode 用户唯一编码
业务层实现判断用户是否存在,且支持同一用户多终端同时在线,业务控制多终端同时消息推送功能