在不关闭当前连接的情况下拒绝新连接

时间:2017-08-22 18:54:41

标签: java serversocket

我有一个守护进程,用于接受来自现场设备的连接 - 他们使用命令/响应进行一些自定义通信。

每次设备连接到端口时,我们都会生成一个线程来处理该通信。每个线程都会自行停止并在通信结束时被销毁。通信可能持续几秒到几分钟。这些线程的产生是在一个永无止境的while循环中完成的,它创建了一个Thread类的新实例,它阻塞了等待接受()与端口的连接,当一个连接产生线程产生时,循环变为回来开始另一个线程spawn并接受()。

当可能的同时连接数量相对较小时,这是可以接受的 - 但我们现在有成千上万的设备可能都在同时尝试通信(最糟糕的情况肯定,但仍然可能的)。

我们想要在传递Thread.activeCount()的某个值后拒绝新连接 - 从外部角度来看,试图打开套接字连接只会失败,因为通过端口是没有打开,连接被拒绝。

下面的代码是我希望可能有效的高度简化的片段,但实际发生的是我们仍然接受来自外部的新连接,它们只是不会附加到线程,直到activeCount下降和连接传递给新线程。

while (1)
{
    if (Thread.activeCount() < maxThreads)
    {
        new MyCustomThread(serverSocket.accept(), dataSource).start();
    }
}

当我的activeCount超过某个值时,我是否可以暂时关闭该端口,因此拒绝新连接而不会杀死任何正在进行的连接?

0 个答案:

没有答案