Java中的客户端服务器通信 - 使用哪种方法?

时间:2010-05-05 10:19:01

标签: java networking client-server stream

我有一个典型的客户端服务器通信 - 客户端将数据发送到服务器,服务器处理数据,并将数据返回给客户端。问题是过程操作可能需要相当长的时间 - 数量级 - 分钟。可以使用一些方法来解决这个问题。

  1. 建立连接并保持活动状态,直到操作完成并且客户端收到响应。
  2. 建立连接,发送数据,关闭连接。现在进行处理,一旦完成,服务器就可以建立与客户端的连接以发送数据。
  3. 建立连接,发送数据,关闭连接。处理发生。客户端询问服务器,如果操作完成,则每n分钟/秒。如果处理完成,则客户端将获取数据。
  4. 我想知道哪种方法是最好的使用方法。解决这个问题可能有一些“事实上的”标准吗?在Java中打开套接字有多“昂贵”?解决方案1.对我来说似乎很讨厌,但2.和3.可以做到。解决方案2的问题在于服务器需要知道客户端正在侦听哪个端口,而解决方案3.增加了一些网络开销。

2 个答案:

答案 0 :(得分:2)

  1. 很好,
  2. 在许多情况下都不起作用,例如客户端在防火墙,NAT等之下。服务器通常接受来自任何地方的传入连接,桌面通常不是
  3. 优于1只是因为连接丢失时没有问题
  4. 解决方案1 ​​+ 3 - 进行长时间等待连接,定期休眠并重新连接。我的意思是:连接到服务器,等待30秒获取数据,如果没有收到数据,则休眠10秒,循环。
  5. 打开套接字有时很昂贵,但并不贵于数据处理。

答案 1 :(得分:0)

我发现选项2存在直接问题。如果客户端位于防火墙后面,他可能会被允许连接并执行请求,但可能会阻止服务器连接回cilent。

正如你所说的,选项1看起来有点讨厌(虽然不是很讨厌,但可以正常工作),所以在列出的选项中,我会选择选项3.也许服务器可以估计处理剩下的时间,并在每次民意调查中提示客户什么时候回来检查。