gpt4 book ai didi

java - 如何在 GlassFish 上构建从 JAX-WS 到 Swing 客户端的推送通知?

转载 作者:搜寻专家 更新时间:2023-10-31 08:27:41 27 4
gpt4 key购买 nike

我有一个广泛分布的 java swing 应用程序,它是来自 Glassfish 3.1.2 服务器上的 JAX WebService EJB 的 Web 服务客户端。

我希望能够向所有用户分发一个字符串通知,并在他们阅读通知之前保持 Activity 状态。通知只需要存在于 Swing 客户端中。

我创建了一个 super 用户门户网站来输入字符串数据并将其保存到数据库中。

我的问题是:

  1. 向我的客户(推送)分发此数据字符串通知的最佳技术是什么?
  2. 我应该如何构建数据库以了解通知是否已被查看? (这样我就可以停止在客户端上显示“新通知”)

或者,如果有一份非常有用的指南引用,我找不到。

我的想法:

  • 让客户端每 10 分钟调用一次网络服务以检查是否有任何新通知
  • 为数据库创建一个通知表和可见的通知。将我的用户表链接到通知已见表。看到的通知非常基本,只有 3 列:NotificationID、UserID、TimeSeen。

最佳答案

模拟推送通知的一种方法是 long polling .这个技术称为 Comet or Reverse AJAX .虽然它更常见在基于 REST 的服务中,它可以很容易地在JAX-WS。

对于 JAX-WS,您需要调查:

Have the client call a webservice every 10 minutes to check if there are any new notifications

代替长轮询,您建立初始客户端连接马上。但是服务器没有立即响应,而是挂起到连接上(异步)。然后当通知需要时要被推送,它会响应现有连接。

有了这种技术,一旦信息可用服务器,它将被“推送”到客户端。

For the database create a notification table and notifications seen. Link my users table to notifications seen table. Notifications seen is very basic with just 3 columns: NotificationID, UserID, TimeSeen.

听起来不错。将其公开为 JAX-WS 服务。当客户收到消息,让他们使用 NotificationID 调用它。

类似于:

NotificationService svc = ...;
UserId userId = ...;

AsyncHandler<Notification> handler = new AsyncHandler<Notification>()
{
public void handleResponse (Response<Notification> response)
{
Notification notification = response.get();

// update swing gui

NotificationID notificationId = notifcation.getId();

svc.markNotificationAsSeen(userId, notificationId);

// continue polling forever (or put in some logic to stop)
svc.getNotificationAsync(userId, this);
}
};

Future<?> invocation = svc.getNotificationAsync(userId, handler);

关于java - 如何在 GlassFish 上构建从 JAX-WS 到 Swing 客户端的推送通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13810374/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com