永久使用套接字来处理Clientsession或为每个请求创建一个新的会话

时间:2019-06-01 16:40:27

标签: java sockets serversocket

所以我对Sockets还是很陌生,我必须为学校创建一个Server-Client-App。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

有关此问题:

Maximum number of socket in java

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

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