gpt4 book ai didi

java - 套接字编程的最佳实践是什么——我是每次都关闭还是保持打开状态?

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:03 25 4
gpt4 key购买 nike

关于这个我还没有找到明确的答案。

我在 Java 7 中有一个客户端/服务器应用程序。服务器和客户端位于不同的计算机上。客户端向服务器发出一个简短的命令(1 行 10 个字符),服务器响应(120 个字符)。这将每 X 秒重复一次——其中 X 是配置文件中的速率。这可能短至 1 秒到 Integer.MAX_VALUE 秒。

每次我创建客户端/服务器应用程序时,其理念都是创建连接、处理业务、关闭连接,然后对数据执行任何其他操作。这似乎是事情应该做的方式——尤其是在对资源编程使用 try 时。

让套接字连接挂起 X 秒有什么问题?关闭并重新启动真的是最佳做法,还是让套接字保持连接并每隔 X 秒发送一次命令是更好的做法?

最佳答案

我认为答案在一定程度上取决于您期望拥有的客户数量。

如果您永远不会打开很多客户端连接,那么我会说让连接保持打开状态并称其为良好,尤其是在延迟是一个问题的情况下 - 即使在 LAN 上,我也看到连接需要几毫秒才能初始化。但是,如果您希望有成百上千的客户端连接并执行此操作,我会每次都重新连接。正如其他人所说,让非阻塞套接字保持打开状态通常意味着您有一个线程仍在运行,这可能会在每个线程的基础上占用几兆字节的堆栈空间。这样做几千次,你会在大多数机器上遇到大问题。

另一个问题是端口空间。仅仅因为 TCP/IP 堆栈为我们提供了 65535 个端口并不意味着所有端口都可用——事实上,大多数本地防火墙会禁止大多数端口被使用,所以即使你有足够的内存来运行数千个并发线程,你也可以非常如果同时打开大量连接,可能会耗尽端口。

关于java - 套接字编程的最佳实践是什么——我是每次都关闭还是保持打开状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17709484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com