2021-04-03 13:21

@北流家园网 首先,你后端要有一个保持所有连接对象的池子,我这里定义的是这样的:
private final Map connections = new ConcurrentHashMap<>(100);
其中WebSocket是在封装的对象,里面主要的成员就是session。
然后有连接,断开连接,你来维护这个connections变量。
最后在MainConfig的onStop里,遍历connections然后通过WebSocket里的session对象断开连接。
我的断开所有代码是这么写的:
public static void disconnectAll() {
Map webSockets = WebSocketManagerUtil.webSocketManager.localWebSocketMap();
CloseReason closeReason = new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE , "NORMAL_CLOSURE");
webSockets.forEach((identifier , webSocket) -> {
try {
webSocket.getSession().close(closeReason);
} catch (IOException e) {
e.printStackTrace();
}
});
webSockets.clear();
}

2021-03-29 20:19

已经解释的很清楚了吧!可以返回任意数据类型,如果你需要这个返回值,你可以在拦截器里通过inv.getReturnValue() 拿到你这个返回值。至于报错,你因为你没调用render方法。如果你确实不需要render任何内容, 你需要手动调用一下renderNull方法。

2021-03-11 16:35

@chcode 目前没有发现开发工作,mac上没有的软件。除了我用的powerdesigner,mac上没有,就装一个虚拟机。

2021-03-11 11:24

jdk1.8绝对是经典。除非现在的jdk满足不了你的需要,否则,就不要随意跟随升级jdk。对于开发来说,那就是自己给你找麻烦。

2021-03-11 11:22

微软也是为了标新立异!什么东西,都想自己弄一套。自从使用mac做开发,7,8年了,再也不适应windows的气蛋玩意儿了。

2021-03-09 11:31

就是配置服务依赖!这个必须的。数据库没起来,就是延迟2分钟也没用。再说,如果中间数据库服务停了,你的程序还有什么用呢。

2021-03-08 15:36

@一路走来 web应用如果部署成多实例实现负载均衡和故障转移,肯定就需要使用分布式session了啊。登录可以使用cookie,也可以集成单点登录,但也会需要这种分布式session的。并不是分布式都是做api接口的。

2021-03-05 11:02

@JFinal 看来还是有不少人很期待JFinal的Redis插件能支持哨兵或则集群模式的。强烈建议官方能跟根据redisson重新封装一套redis插件。除了能对redis读写,还能支持例如分布式锁这些高级功能。

2021-03-05 10:57

@海哥 JBoot已经做得很好了。我也从JBoot里学了很多东西。只是我这里自己封装了一套方便自己开发使用。自从换到undertow上,也就不再考虑其他web容器了。只要能让我尽快打完收工,尽早回家陪“女朋友”就行了。^_^

2021-03-03 11:29

@北流家园网 结合@JFinal的解释以及websocket的特性,websocket的session是不能序列化的。你这个问题,要通过两个步骤解决:第一:解决后台抛的异常问题,我观察在热加载的时候,其实是要回调onStop方法的,在这个方法里,关闭所有已经连上的websocket的session。这样就不会抛那个XNIO007007: Thread is terminating异常了。第二步,你的客户端一定要增加断线重连机制,我是通过发心跳实现的断线重连。这样,你后台一旦触发热部署,会先关闭所有已经连接的websocket,然后客户端会触发断线重连,就会重新连接上服务器。回复通信。

2021-03-02 12:11

@JFinal 可以。分享里好像不能传附件,那个SessionManager代码需要传上来。

2021-03-02 09:41

@JFinal,已经搞定了,就是退出的时候,如果有正在通信的websocket,就会抛这个异常,说通道已经关闭。我在退出之前,把所有连接都关闭。就没事了。
另外,我在另外一个反馈里提的把自定义的SessionManager配置进undertow也已经搞定了。当然,如果波总能官方内置肯定是更好。

2021-03-01 15:06

@JFinal 没有带-9参数,带-9参数,就没有onStop的回调了。我刚才考虑是不是因为有客户端已经连上到这个服务器端实例,然后我退出服务,websocket服务器还在和客户端连接着,然后就会抛这个异常。我刚才在onStop里把该服务实例里所有创建的websocket的session都close掉。就没有这个异常抛出了。对强迫症来说,看起来清爽多了。

2021-03-01 14:12

@JFinal,我的也有这个问题,用到undertow的websocket。正常使用环境的时候有几百个用户在线,后台用3个实例做分布式websocket,如果服务器端用jfinal.sh stop停止的时候,该实例会抛这个异常。因为我的前端做了故障重连机制,所以客户端会自动重连到其他服务器端。只是这个异常看起来很别扭。下面提示贴图:


截屏2021-03-01 下午2.01.57.jpg