How to send messages from server to client?

前端 未结 6 823
轮回少年
轮回少年 2021-02-08 13:12

I am going to implement something similar to Facebook notification and this website (StackOverflow\'s notification which is notifying us if anyone write a comment/answer etc for

6条回答
  •  孤独总比滥情好
    2021-02-08 13:49

    Sounds like a task for WebSockets. It is part of Java EE 7 so the Glassfish should be one of the first AS that will support it.

    For intercepting the DB access you can use @PostUpdate and @PostPersist. Here is related question.

    There are many ways to do the so called Server Push for notifying the connected clients:

    • polling (the link you've provided in the question ("Are we there yet? Are we there yet? ..."))
    • long polling (smarter way of polling - long-lived HTTP technique using keepalive messages)
    • WebSockets (JSR 356)
    • piggy-backing
    • SPDY(wiki)
    • Server-Sent Events (related answer, wiki)

    EDIT: In the Java world, there are couple of frameworks where server push (reverse ajax) is implemented out-of-the box. If you are familiar with GWT, I would suggest Errai. Other alternative is the Atmospere. The downside of the Atmospere is the fact that it requires standalone running process next to your regular application server with your web app. I was playing with it a year ago so this may have been changed since then.

    In general, it is hard to provide you with a concrete piece of code, because it depends on the framework you will choose. I am familiar with Errai so here is an example in it:

    Server Side:

    @ApplicationScoped
    public class TickerService {
    
      @Inject
      private Event tickEvent;
    
      private void sendTick() {
        tickEvent.fire(new Tick());
      }
    } 
    

    Client Side:

    @EntryPoint
    public class TickerClient {
      public void tickHappened(@Observes Tick tick) {
    
        // update the UI with the new data
      }
    }
    

    Other benefits of using the Errai is having the CDI on the server and on the client out-of-the-box, another thing that is nice is using the web-sockets under the covers if it is supported and falling back to other solutions otherwise.

    Whatever you choose, it should fit to your existing infrastructure and to your client side UI framework.

提交回复
热议问题