首页 文章

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

提问于
浏览
2

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

  • Build 连接并保持活动状态,直到操作完成并且客户端收到响应 .

  • Build 连接,发送数据,关闭连接 . 现在进行处理,一旦完成,服务器就可以 Build 与客户端的连接以发送数据 .

  • Build 连接,发送数据,关闭连接 . 处理发生 . 客户端询问服务器,如果操作完成,则每n分钟/秒 . 如果处理完成,则客户端获取数据 .

我想知道哪种方法是最好的使用方法 . 解决这个问题可能有一些“事实上的”标准吗?在Java中打开套接字有多“昂贵”?解决方案1.对我来说似乎很讨厌,但2.和3.可以做到 . 解决方案2的问题在于服务器需要知道客户端正在侦听哪个端口,而解决方案3.增加了一些网络开销 .

2 回答

  • 2

    我看到选项2立即出现问题 . 如果客户端位于防火墙后面,他可能会被允许连接并执行请求,但可能会阻止服务器连接回cilent .

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

  • 0
    • 很好

    • 在许多情况下都不起作用,例如,客户端在防火墙,NAT等之下 . 服务器通常接受来自任何地方的传入连接,桌面通常不接受

    • 优于1只是因为连接丢失时没有问题

    • 解决方案1 3 - 进行长时间等待连接,定期休眠并重新连接 . 我的意思是:连接到服务器,等待30秒获取数据,如果没有收到数据,则休眠10秒,循环 .

    打开套接字有时很昂贵,但并不像您的数据处理那么昂贵 .

相关问题