为了账号安全,请及时绑定邮箱和手机立即绑定

永久使用 Socket 来处理 Clientsession 或为每个请求创建一个新的

永久使用 Socket 来处理 Clientsession 或为每个请求创建一个新的

Qyouu 2022-12-28 16:47:39
所以我对套接字很陌生,我必须为学校创建一个服务器客户端应用程序。我希望客户端在运行期间多次向服务器请求某些东西。我不确定我是否应该为我收到的每个请求创建一个新的 java.net.Socket(客户端每次打开新套接字并且 Java Serversocket 接受)或使用单个套接字并在客户端运行时保留它。
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

这在很大程度上取决于套接字的使用频率。例如,如果您知道客户端将每 50 毫秒向服务器发送一次请求,那么保持套接字打开会更容易。但是,如果您知道客户端只会每 5 分钟从套接字请求一次信息,那么关闭连接并在需要时创建一个新连接可能会更好。如果您不知道下一个请求何时创建,也是如此。

在服务器端创建一个新的 Socket 并不是很昂贵,所以如果它不经常使用,最好关闭连接。一个例外可能是一个特殊的套接字,它在创建时需要验证或其他昂贵的东西,但在学校项目中可能不是这种情况。

所以总的来说:这取决于套接字的使用情况,但是如果您不确定它是否经常使用,最好关闭它并在需要时再次打开它。


查看完整回答
反对 回复 2022-12-28
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

与这个问题相关:

java中的最大套接字数

如果您担心超过可以打开的最大套接字数(我想这在您的情况下是极不可能的)您可以创建一个解决方法,您使用 TCP 最初建立连接,向客户端发送一个 UID( Unique Identifier,64 位unsigned long long类型应该足够了)然后关闭 TCP 连接。填写并维护一个详细说明连接详细信息(IP 地址、唯一标识符代码)的结构(或您的情况下的 Class 对象),然后等待通过 UDP(用户数据报协议,TCP 的替代方案)发送的到达数据包。如果您决定使用 UDP,请注意您需要实现一种重新排序数据包的方法以重建字节流(序列化)和一种在数据包不知何故未到达时重新发送数据包的机制(数据包丢失恢复) .

听起来比实际情况更糟。不过,我会重复一遍,如果您不担心超出任何限制,请不要为这些错综复杂的事情而烦恼。


查看完整回答
反对 回复 2022-12-28
  • 2 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信