2012-03-07 75 views
2

我在我身边创建了一个服务器套接字。我不知道客户端何时连接到我。呼叫服务器套接字接受方法的问题与无限超时

调用的ServerSocket.accept()在我的应用程序没有设置任何套接字超时会解决我接受的客户在任何时间点的问题。我在一个单独的线程中这样做,所以这不会阻止我的应用程序的另一部分。

我担心的是,因为接受()块直到它得到一个呼叫从一个客户端就不会这样消耗任何资源,可能是这样,如果我没有得到来自客户端程序的调用一个星期左右。

是否有任何其他方式接受客户端连接。我没有关于客户端何时调用套接字连接的任何信息,除了它在某些时候调用。

回答

1

有一个与在不同的线程调用accept没有问题。该线程将在调用accept时被阻塞,并且直到连接入站时才会被操作系统调度。实际上,如果在整个星期内没有连接,那么在此期间,线程将无法在CPU上运行。

因此,它不会消耗任何CPU资源和只有一点内存。

+0

左右我们希望;)它取决于JVM的实现,也许OS(调度)。我同意你的帖子都铎王朝。 – Adrian 2012-03-07 14:52:40

+0

但会怎么JVM知道有一个连接入境,可能是内部的JVM内的一些其他线程应该不断冲击插座,看看是否有可能消耗资源 – vjk 2012-03-07 14:58:50

+3

“但如何将JVM知道有任何的入站连接连接入站' - 因为accept()返回。 '可能在JVM内部的某个其他线程应该不断地敲击套接字以查看是否有任何入站连接' - 而不是我曾经使用的任何操作系统。调用accept()的线程由来自运行TCP堆栈的内核线程的信号准备好。内核线程反过来由来自NIC驱动器的信号准备好,因此最初来自硬件中断。没有投票。就像@Tudor说的 - 如果没有任何东西想要连接,什么都不会发生。 – 2012-03-07 16:30:26

相关问题