【问题标题】:Java - How to send notification from server to clientJava - 如何从服务器向客户端发送通知
【发布时间】:2011-03-20 11:41:23
【问题描述】:

我有一个服务器,我的 java 网络应用程序数据库 服务器驻留。

现在我的网络应用的客户是 两种类型:

  • ClientType1
  • ClientType2

两者都可以访问数据库。

ClientType1 将数据存储在数据库中。

ClientType2 从数据库中检索数据。

但是 ClientType1 应该启动 将数据存储在数据库中 当 ClientType2开始

类似地,ClientType1 应该停止将数据存储在数据库中 当 ClientType2Stop

================================================ ==============================

Q1.有什么办法可以解决这个问题?

  • 以下是我想到的方法:

  • 在数据库中创建一个表,其中有一列显示状态 StartStop 并且该列的值应由 ClientType2 设置强>。 ClientType1会不断向数据库发送查询,从这个表中获取状态,并根据状态进行操作。

  • 应用 ServerPush 方法,服务器将通过该方法保持与 ClientType1 的连接,并在收到命令时将请求发送给他( 开始停止)从ClientType2。这种方法的问题是没有。服务器上打开的套接字的数量将随着数量的增加而增加。 ClientType1

【问题讨论】:

    标签: java server-push


    【解决方案1】:

    您应该为此使用一种 Ajax,因为这将“服务器可以调用客户端”抽象出来。

    选择一个允许您保持单个连接打开并通过此连接执行多项操作的库。

    【讨论】:

    • 我认为单个打开的连接只能服务于一个客户端。因此,对于许多客户端,服务器需要保持打开各种连接(套接字),如果我们有很多客户端,这些连接将无法正常工作。
    • 自然每个客户端都需要自己的连接。这就是 TCP/IP 的工作原理。对于“许多客户端”场景,您将需要使用针对这种用途进行了调整的底层 Web 服务器 - 请参阅 en.wikipedia.org/wiki/C10k_problem - 这是 Jetty 开发人员对该问题的主要评论。 markmail.org/message/ulfklgftht7lhcqu
    【解决方案2】:

    我并不认为通过数据库进行进程间通信是一种很好的方法。典型的场景是客户端向服务器注册自己,使其有资格使用基于套接字的机制接收消息。

    然后客户端可以:

    • 请求服务器代表它执行数据库操作
    • 请求访问数据库

    如果有很多客户端保持打开连接将成为问题,您可以在每次需要与服务器通信时启动新连接,或者让服务器提供例如某种服务器可以提供的 REST API投票。

    【讨论】:

    • 您能否解释一下“客户端向服务器注册自身”是什么意思。
    • @Yatendra,即client 发起与server 的联系,该server 可以保持所有clients 的队列。此队列可用于仲裁客户端之间的数据库访问。例如,服务器可以依次向队列中的客户端发送startstop命令。简而言之,您可以通过网络应用Listener 概念。
    猜你喜欢
    • 2014-06-06
    • 2022-06-15
    • 2014-08-12
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多