Firebase服务器发送事件-如何构建Java/JavaScript客户端

Firebase服务器发送事件-如何构建Java/JavaScript客户端,java,javascript,firebase,server-sent-events,Java,Javascript,Firebase,Server Sent Events,我是Firebase的新手,正在构建一个原型以测试是否适合我们的需要。我已经有了一个聊天示例并正在运行,到目前为止还不错 其次是需要倾听变化。我曾尝试使用Java和JavaScript连接到支持服务器发送事件的RESTAPI,但无法使其正常工作 我用Java编写了以下代码: public class FirebaseApplication { @Test public void test() throws Exception{ Client client = ClientBuil

我是Firebase的新手,正在构建一个原型以测试是否适合我们的需要。我已经有了一个聊天示例并正在运行,到目前为止还不错

其次是需要倾听变化。我曾尝试使用Java和JavaScript连接到支持服务器发送事件的RESTAPI,但无法使其正常工作

我用Java编写了以下代码:

public class FirebaseApplication {
  @Test
  public void test() throws Exception{
    Client client = ClientBuilder.newBuilder()
      .register(SseFeature.class).build();
    WebTarget webTarget = client.target(new URI(
      "http://incandescent-torch-xxxx.firebaseio.com/logs.json"));
    EventSource eventSource = new EventSource(webTarget) {
      @Override
      public void onEvent(InboundEvent inboundEvent) {
        System.out.println("Data " + inboundEvent.readData());
      }
    };
    Thread.sleep(20000);
    System.out.println("Exit");
    eventSource.close();
  }
}
然而,我没有收到任何事件,即使我与小程序的执行并行

接下来,我尝试使用JavaScript客户端,但结果相同。我从未收到任何事件

var source = new EventSource(
  "http://incandescent-torch-xxxx.firebaseio.com/logs.json");

source.addEventListener('message', function(e) {
  console.log(e.data);
}, false);

source.addEventListener('open', function(e) {
  console.log("open");
  // Connection was opened.
}, false);

source.addEventListener('error', function(e) {
  if (e.readyState == EventSource.CLOSED) {
    console.log("close");
    // Connection was closed.
  }else{
    console.log("error");
    console.log(e);
  }

}, false);

有人知道我做错了什么吗

为了接收事件,您需要监听“Firebase”提供的事件,这些事件包括放置、修补、保持活动等。。。我已经试过了,而且效果很好

您可以参考以下代码段

   if (typeof (EventSource) !== "undefined") {
            var source = new EventSource("https://xxxxxxxxx.firebaseio.com/TestNode.json");
            source.onmessage = function (event) {
                document.getElementById("result").innerHTML += event.data + "<br>";
            };

            source.addEventListener("message", function (e) {
                console.log(e.data);
            }, false);

            source.addEventListener("open", function (e) {
                console.log("Connection was opened.");
            }, false);

            source.addEventListener("error", function (e) {
                console.log("Error - connection was lost.");
            }, false);

            //magic goes here!
            source.addEventListener("patch", function (e) {
                console.log("Patch UP - " + e.data);
            }, false);
            //And here!
            source.addEventListener("put", function (e) {
                console.log("Put UP - " + e.data);
            }, false);


        } else {
            document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
        }
if(typeof(EventSource)!=“未定义”){
变量源=新事件源(“https://xxxxxxxxx.firebaseio.com/TestNode.json");
source.onmessage=函数(事件){
document.getElementById(“结果”).innerHTML+=event.data+“
”; }; source.addEventListener(“消息”,函数(e){ 控制台日志(如数据); },假); source.addEventListener(“打开”,函数(e){ log(“连接已打开”); },假); source.addEventListener(“错误”,函数(e){ log(“错误-连接丢失”); },假); //魔术来了! 来源:addEventListener(“补丁”,函数(e){ console.log(“补丁-”+e.data); },假); //还有这里! source.addEventListener(“put”,函数(e){ console.log(“上传-”+e.data); },假); }否则{ document.getElementById(“结果”).innerHTML=“对不起,您的浏览器不支持服务器发送的事件…”; }
参考以下文件,


有什么原因不能使用Firebase提供的Java客户端吗?尽管它们经常被贴上“android库”的标签,但它们也可以在常规的JRE上工作。经过试用,它们确实可以工作。谢谢