Java - 从客户端

时间:2016-03-16 23:14:32

标签: java multithreading client-server

我有一个服务器应用程序,其中包含一个名为BidItem的类的实例。客户端可以连接到服务器(每个都通过ClientHandler类中的单独线程),并对服务器上保留的项目进行出价。这会更新BidItem的{​​{1}}属性。

我希望所有客户端能够监控highbid的{​​{1}}属性,以便在新的{{1}时可以在客户端GUI上输出消息检测到值。

我已经在StackOverflow上问了几个与之相关的问题,而我仍然在考虑如何实现它,这是我到目前为止所做的:

  • 客户端应用程序需要运行一个单独的线程来监视此变量在后台的值
  • 此线程需要使用highBid块,以及Java的BidItemhighBid方法与其他线程进行通信

这一切都在我脑海中运作良好,只有一件事我正在努力让整个想法发挥作用。如前所述,synchronized保存在服务器上,并为每个连接的客户端传递到wait(),这是项目可以更新的地方。 我正在努力解决的问题是我的客户端新线程如何能够访问notifyAll()的{​​{1}}属性以便能够监视更改,因为BidItem个实例永远不会传递给客户。

这是我所追求的草图代码,我只需要弄清楚如何将值输入变量:

客户类别:

ClientHandler

BidMonitor CLASS:

highBid

希望这可以让我知道自己在追求什么,但随时提出问题! 对此提出的任何帮助都会很棒,提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果这不仅仅是一个编程练习,我建议不要为这样的常见用例实现网络协议。我建议使用排队系统将更改发布到BidItem。每次项目更改时,都会将消息推送到队列。有兴趣接收更新的客户端订阅队列。看看像ActiveMQ这样的技术。这些已经为您编写,他们已经解决了您尚未考虑过的问题。有一些Java客户端库可以轻松实现这一点。请参阅此tutorial

作为旁注,直接使用套接字通常不是好的设计。套接字要求您设计和实现客户端和服务器协议,并且通常有一些您没有想过的事情。例如。为什么不使用HTTP和Web服务?