我有一个使用 SSL 套接字并使用证书来识别连接到服务器的不同客户端的扭曲服务器。我想强制每个可能的ID只有一个连接的状态。我能想到的两种方法是跟踪连接的 id,然后不允许使用相同 id 的第二个连接,或者允许第二个连接并立即终止第一个。我正在尝试稍后做,但遇到了一些问题(我将在最后解释我的选择)
我在工厂类中存储了一个连接列表,然后在 SSL 握手之后,我将客户端的 id 与该列表进行比较。如果它已经在该列表中,我会尝试调用.transport.abortConnection()
它。然后我想做一些正常的事情来在我的数据库中记录新的连接。但是,调用abortConnection()
似乎并没有connectionLost()
直接调用,这是我进行清理并调用数据库以表示连接丢失的地方。因此,我的代码然后记录了该 id 已连接,但后来调用connectionLost()
导致数据库似乎已断开该 id。
是否有某种方法可以阻止传入的第二个连接进一步处理,直到第一个连接完成断开连接处理?
选择说明: 我这样做的全部原因是我有 NAT 后面的客户端,这些客户端似乎在相当定期地更改其 IP 地址(每 1-3 天一次)。连接的设备只会将其连接不干净地切断,然后它们会尝试使用新 IP 重新连接。但是,我的服务器没有收到有关断开连接的通知,并且通常必须使连接超时。但是,在服务器超时连接之前,客户端有时会设法重新连接,然后服务器处于同一个客户端有两个明显连接的状态。因此,通常第一个连接是我真正想要终止的连接。