如何从服务器向客户端发送消息?

我将实现类似于Facebook通知和此网站的内容(StackOverflow的通知会通知我们是否有人为我们的问题写评论/答案等)。请注意,用户将使用我的应用程序作为网站而不是移动应用程序。

我遇到以下获取结果的答案,但我需要推送结果而不是获取结果。

根据建议,我在实体类中创建了一个简单方法,并向其中添加了@PostPersist,但此方法不起作用,因此基于此答案,我添加了persistence.xml文件来定义侦听器,但在session.save(user)之后aftersave方法不会被触发。

@Entity

public class User{

.....

@PostPersist

public void aftersave(){

System.err.println("*****this is post persist method****");

}

}

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!--

To change this template, choose Tools | Templates

and open the template in the editor.

-->

<property name="hibernate.ejb.event.pre-insert" value="my.hibernate.events.listeners.Listener" />

<property name="hibernate.ejb.event.pre-update" value="my.hibernate.events.listeners.Listener" />

<property name="hibernate.ejb.event.pre-delete" value="my.hibernate.events.listeners.Listener" />

<property name="hibernate.ejb.event.post-insert" value="my.hibernate.events.listeners.Listener" />

<property name="hibernate.ejb.event.post-update" value="my.hibernate.events.listeners.Listener" />

<property name="hibernate.ejb.event.post-delete" value="my.hibernate.events.listeners.Listener" />

 <dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

<version>4.2.1.Final</version>

<type>jar</type>

</dependency>

回答:

听起来像WebSockets的任务。它是Java EE

7的一部分,因此Glassfish应该是最早支持它的AS之一。

要拦截数据库访问,可以使用@PostUpdate@PostPersist。这是相关的问题。

有很多方法可以执行所谓的服务器推送来通知已连接的客户端:

  • 轮询(您在问题中提供的链接( “我们到了吗?我们到了吗?…” ))
  • 长轮询(更智能的轮询方式-使用Keepalive消息的长寿命HTTP技术)
  • Web套接字(JSR 356)
  • SPDY(Wiki)
  • 服务器发送的事件(相关答案,Wiki)

编辑:在Java世界中,有两个框架是在即开即用的情况下实现服务器推送(反向Ajax)的。如果您熟悉GWT,我建议您Errai。其他选择是Atmospere。Atmospere的缺点是,它需要独立的运行过程,该过程位于Web应用程序旁边的常规应用程序服务器旁边。我一年前就在玩它,所以从那以后可能已经改变了。

通常,很难为您提供具体的代码,因为这取决于您选择的框架。我对 很熟悉,因此这里有一个例子:

@ApplicationScoped

public class TickerService {

@Inject

private Event<Tick> tickEvent;

private void sendTick() {

tickEvent.fire(new Tick());

}

}

@EntryPoint

public class TickerClient {

public void tickHappened(@Observes Tick tick) {

// update the UI with the new data

}

}

使用Errai的其他好处是可以直接在服务器和客户端上使用

,另一件事很好,那就是使用Web套接字(如果受支持),如果没有支持的话,可以使用其他解决方案。

无论您选择什么,它都应该适合您现有的基础结构和客户端UI框架。

以上是 如何从服务器向客户端发送消息? 的全部内容, 来源链接: utcz.com/qa/430642.html

回到顶部