Socket.D v2.5.11

关闭与安全关闭

</> markdown

1、会话的两种关闭方式

方式单个会话处理说明服务端处理说明
关闭session.close()server.stop()
安全关闭session.preclose() -> wait(3s) -> session.close()server.prestop() -> wait(3s) -> server.stop()

关闭接口说明:

接口说明备注
session.close()向对端发送 close[code=1001] 协议帧
之后关闭连接
对端会触发 listener::onClose 事件
正在发送中的消息,都将失败
session.preclose()向对端发送 close[code=1000] 协议帧
但不关闭连接
session.isClosing()==true,不建议再使用此会话
但是发送中的消息还能传输
server.stop()服务端所有 session 执行 .close()
server.prestop()服务端所有 session 执行 .preclose()

如果服务端只有监听器没有 server ?:

可以在监听器的里收集并维护所有的 session,在需要的时机遍历 session 执行 close 和 preclose

2、关闭

一般情况下,都只需要关闭即可。

3、安全关闭(一般,在 Broker 集群开发时才用到)

安全关闭,是先发个预关闭的协议帧告诉对端“我将要关闭了”,可以等你几秒,你有什么事儿抓紧的(但是不要发新消息过来了)。然后等几秒。再发送关闭协议帧,并关闭连接。

如果想要,关闭前让正在发送中的消息先发完;或者,方便让集群调度能过滤掉将要关闭的会话。可采用“安全关闭”。

session.preclose() -> wait(3s) -> session.close() 

注意,预关闭后等几秒(具体时间,视业务情况),给正在发的消息预留时间,再进行关闭。