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

Use Socket permantently to handle Clientsession or create new one for every request

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

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

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

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

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

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

与此问题相关:

Maximum number of socket in java

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

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