猿问

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

所以我对套接字很陌生,我必须为学校创建一个服务器客户端应用程序。

我希望客户端在运行期间多次向服务器请求某些东西。

我不确定我是否应该为我收到的每个请求创建一个新的 java.net.Socket(客户端每次打开新套接字并且 Java Serversocket 接受)或使用单个套接字并在客户端运行时保留它。


Qyouu
浏览 86回答 2
2回答

慕勒3428872

这在很大程度上取决于套接字的使用频率。例如,如果您知道客户端将每 50 毫秒向服务器发送一次请求,那么保持套接字打开会更容易。但是,如果您知道客户端只会每 5 分钟从套接字请求一次信息,那么关闭连接并在需要时创建一个新连接可能会更好。如果您不知道下一个请求何时创建,也是如此。在服务器端创建一个新的 Socket 并不是很昂贵,所以如果它不经常使用,最好关闭连接。一个例外可能是一个特殊的套接字,它在创建时需要验证或其他昂贵的东西,但在学校项目中可能不是这种情况。所以总的来说:这取决于套接字的使用情况,但是如果您不确定它是否经常使用,最好关闭它并在需要时再次打开它。

幕布斯7119047

与这个问题相关:java中的最大套接字数如果您担心超过可以打开的最大套接字数(我想这在您的情况下是极不可能的)您可以创建一个解决方法,您使用 TCP 最初建立连接,向客户端发送一个 UID( Unique Identifier,64 位unsigned long long类型应该足够了)然后关闭 TCP 连接。填写并维护一个详细说明连接详细信息(IP 地址、唯一标识符代码)的结构(或您的情况下的 Class 对象),然后等待通过 UDP(用户数据报协议,TCP 的替代方案)发送的到达数据包。如果您决定使用 UDP,请注意您需要实现一种重新排序数据包的方法以重建字节流(序列化)和一种在数据包不知何故未到达时重新发送数据包的机制(数据包丢失恢复) .听起来比实际情况更糟。不过,我会重复一遍,如果您不担心超出任何限制,请不要为这些错综复杂的事情而烦恼。
随时随地看视频慕课网APP

相关分类

Java
我要回答