# jfinal-websocket **Repository Path**: onelikeyou/jfinal-websocket ## Basic Information - **Project Name**: jfinal-websocket - **Description**: JFinal架构下开发WebSocket,使用时面向接口WebSocketManager,支持单机(基于内存)和集群(基于Redis的发布订阅) - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 26 - **Created**: 2019-04-28 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # jfinal-websocket #### 项目介绍 jfinal-websocket to develop websocket based on javax.websocket JFinal架构下开发WebSocket,使用时面向接口WebSocketManager,支持单机(基于内存)和集群(基于Redis的发布订阅) SpringBoot架构下开发WebSocket参见 https://gitee.com/xxssyyyyssxx/websocket-springboot-starter #### 软件架构 1.基于 websocket 定制,主要完成的功能是WebSocket session的状态管理,具备单机和集群能力。 2.可以定制自己的 ServerEndPoint 和 WebSocketManager。 #### 安装教程 compile 'top.jfunc.websocket:jfinal-websocket:1.0' 使用方式参见 https://gitee.com/xxssyyyyssxx/jfinal-websocket-demo #### 使用说明 1.配置`WebSocketHandler`用于排除JFinal的路由拦截 ``` /** * 接收处理跳转 */ @Override public void configHandler(Handlers me) { me.add(new WebSocketHandler("^/websocket")); } ``` 2.配置`WebSocketManager` 在JFinal的`afterJFinalStart`或者`onStart`方法中调用一下类的相应方法 ``` public class WebSocketManagerConfig { /** * 基于内存的单机 WebSocketManager */ public static void configMemory(){ WebSocketManagerUtil.setWebSocketManager(new MemWebSocketManager()); } /** * 基于Redis的集群 WebSocketManager */ public static void configCluster(Jedis jedis){ jedis.subscribe(new Subscriber() , RedisWebSocketManager.CHANNEL); WebSocketManagerUtil.setWebSocketManager(new RedisWebSocketManager(jedis)); } /** * 配置心跳监测 * @param period 多长时间执行一次 * @param timeSpan 时间间隔 * @param errorTolerant 错误容忍次数 * @param todoAtRemoved 干什么 */ public static void configHeartBeatCheck(int period , long timeSpan , int errorTolerant , TodoAtRemoved todoAtRemoved){ Executors.newScheduledThreadPool(1).scheduleAtFixedRate(()->{ new WebSocketHeartBeatChecker().check( WebSocketManagerUtil.getWebSocketManager() , timeSpan , errorTolerant, todoAtRemoved); } , 0 , 1 , TimeUnit.SECONDS); } } ``` 3.配置端点,调用相应的方法 ``` @ServerEndpoint("/websocket/{identifier}") public class WebSocketServerEndPoint extends BaseWebSocketEndpoint { @OnOpen public void onOpen(Session session , @PathParam(IDENTIFIER) String identifier) { } @OnClose public void onClose(Session session , @PathParam(IDENTIFIER) String identifier) { } @OnMessage public void onMessage(String message, Session session , @PathParam(IDENTIFIER) String identifier) { } } ``` 4.使用`WebSocketManagerUtil`获取到`WebSocketManager` 5.如果使用了 ** Nginx ** 作为负载均衡器,则需要在配置中添加 ``` Nginx反向代理要支持WebSocket,需要配置几个header,否则连接的时候就报404 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s; //这个时间不长的话就容易断开连接 ``` **此项目理论上可以应用于所有Web框架,而不仅仅适用于JFinal,只需要在某个时刻调用配置类的相应方法即可**