java – 套接字编程的最佳实践是什么 – 我每次都要关闭它还是让
我还没有找到一个明确的答案.
我在Java 7中有一个客户端/服务器应用程序.服务器和客户端在单独的计算机上.客户端有一个短(1行10个字符)命令发送到服务器,服务器响应(120个字符串).这将每X秒重复一次 – 其中X是配置文件中的速率.这可能短至1秒到Integer.MAX_VALUE秒. 每次我创建客户端/服务器应用程序时,理念都是创建连接,执行业务,关闭连接,然后对数据执行任何其他操作.这似乎是应该做的事情 – 特别是在使用资源编程的尝试时. 将插座连接挂在那里X秒会有什么打嗝?关闭并重新启动是否真的是最佳做法,或者套接字保持连接并且每隔X秒发送命令是一种更好的做法? 解决方法
我认为答案取决于您期望拥有的客户数量.
如果你永远不会打开很多客户端连接,那么我会说保持连接打开并调用它,特别是如果延迟是一个问题 – 即使在LAN上,我已经看到连接需要几毫秒来初始化.但是,如果您希望有数百或数千个客户端连接并执行此操作,我会每次重新连接.正如其他人所说,打开非阻塞套接字通常意味着你有一个线程可以运行,这可能会在每个线程的基础上占用几兆字节的堆栈空间.这样做几千次,你会在大多数机器上遇到大问题. 另一个问题是端口空间.仅仅因为TCP / IP堆栈为我们提供了65535个总端口并不意味着所有端口都可用 – 事实上,大多数本地防火墙都会禁止大多数人使用,所以即使你有足够的内存来运行数千个同步线程,你也可以如果您同时打开大量连接,可能会耗尽端口. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 自从迁移到Spring Boot 1.1.4.RELEASE之后,发生@Va
- Java生成和解析XML格式文件和字符串的实例代码
- JDBC 数据库连接池
- javax.persistence.PersistenceException:没有名为EntityM
- java – AsycTask抛出IllegalStateException – 片段未附加
- Java – 不可变数组线程安全
- java – 如何使用HdmiControlService
- Java 图片与byte数组互相转换实例
- Java ServerSocket如何在接受客户端后获得绑定到同一本地端
- 使用Java 8 Time API获取第一次和最后一次(以毫秒为单位)