WebSocket服务

简要描述
  • 提供通用的WebSocket服务,业务层集成后可以直接使用
WebSocket服务基础说明
  • NettyWebsocketServer
//采用默认的配置方式启动
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
  • 4、webSocket测试
    URL访问地址:    ws://127.0.0.1:10086/WebSocket?terminalType=PcWebClient&userCode=ABCDEFG
    参数说明:   
        terminalType    终端类型 (AppClient:app终端、PcClient:pc客户端 、PcWebClient:web客户端 、WeChatClient:小程序客户端)
        userCode        用户唯一编码

    业务层实现判断用户是否存在,且支持同一用户多终端同时在线,业务控制多终端同时消息推送功能