How to send messages from server to client?

前端 未结 6 812
轮回少年
轮回少年 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:36

    mqtt can be used for server pushing and message broadcasting.

    There are more detail information in http://mqtt.org/.

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

    Updated: Jul 11, 2013

    Mqtt is a publish/subscribe, extremely simple and lightweight messaging protocol. If server is a publisher and client browser subscribe the topic which server publish to, then server can push message to client directly.

    Some useful resource:

    Mosquitto is an open sourced mqtt server. Easy to install and configure.

    mqtt-client is a proven powerful java mqtt client.

    0 讨论(0)
  • 2021-02-08 13:39

    but after session.save(user) the aftersave method does not get triggered.

    • @PostPersist is a JPA callback.
    • session.save() is a non-JPA, hibernate proprietary method. JPA uses entityManager.persist().
    • you're using incompatible features
    0 讨论(0)
  • 2021-02-08 13:47

    Use Node JS and socket.io

    This technology chooses the best transportation method based on the browser that the client is using.

    For latest browsers it uses Web Sockets and for others it degrades gracefully to Flash Socket or Long Pooling. See more here

    What you need to do is set up a server using these technologies. The server would run at a particular port. All clients would listen to that port and server would be able to push data to the client through that port.

    0 讨论(0)
  • 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<Tick> 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.

    0 讨论(0)
  • 2021-02-08 13:49

    Comet also known as Reverse Ajax, is a web application model in which a long-held HTTP request allows a web server to push data to a browser, without the browser explicitly requesting it.

    Comet (AKA long lived http, server push) allows the server to start answering the browser's request for information very slowly, and to continue answering on a schedule dictated by the server. For more information about Comet, see the following:

    • Alex Russell's original post coining the term

    • The Wikipedia article on Comet

    • Comet Daily, a blog with regular posts on the subject

    DWR is a Java library that enables Java on the server and JavaScript in a browser to interact and call each other as simply as possible. With Reverse Ajax, DWR allows Java code running on a server to use client side APIs to publish updates to arbitrary groups of browsers. This allows interaction 2 ways - browser calling server and server calling browser. DWR supports Comet, Polling and Piggyback (sending data in with normal requests) as ways to publish to browsers.

    DWR provides integration with Spring, Struts, Guice, Hibernate and others. You can read more from here.

    Other Comet and Reverse AJAX frameworks:

    • Grizzly Comet API
    • Atmosphere
    • AJAX push with ICEfaces
    • Asynchronous Servlet using Servlet 3.0
    0 讨论(0)
  • 2021-02-08 13:53

    Check for update from server on every 30 Seconds or as per requirement.

    window.setInterval(function(){
      /// call your function here
     //Make AJAX call
     //Update Respective HTML Contact i,e, DIV
    
    }, 30000);
    
    0 讨论(0)
提交回复
热议问题