2015-02-23 68 views
2

我是Firebase的新手,并构建了一个原型来测试是否适合我们的需求。我有一个聊天示例,并且运行良好。Firebase服务器发送的事件 - 如何构建Java/JavaScript客户端

接下来是需要听取更改。我曾尝试使用Java和JavaScript连接到支持服务器发送事件的REST API,但我无法使其工作。

在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); 

有没有人有我所做的错误的线索?

+0

你不能使用Java客户端火力地堡提供任何理由吗? https://www.firebase.com/docs/android/,尽管它们经常被标记为“android库”,但它们也在常规JRE上工作。 – 2015-02-23 13:49:25

+0

试过了,他们确实有效。谢谢 – 2015-02-24 11:12:25

回答

0

为了接收事件,您需要听取'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..."; 
     } 

请参阅下列文件, https://firebase.google.com/docs/database/rest/retrieve-data

https://firebase.google.com/docs/reference/rest/database/

相关问题