EventSourceHQ发送事件返回OK,但什么都不做

时间:2013-08-17 13:00:40

标签: ruby heroku server-sent-events

我正在使用Heroku的EventSourceHQ。我没有使用现有的客户端,而是在Scala中重写客户端。这很简单,因为Ruby implementation显示。

创建套接字是成功的,客户端javascript似乎对生成的socket_id感到满意。但是当我在服务器eventsourcehq.com/event上触发事件时,返回HTTP 200,正文为{ }。此外,浏览器中不执行任何事件处理程序。也就是说,服务器向eventsourcehq.com发送一个事件,但该事件不会在浏览器中转发给客户端。

我发布到服务器中的eventsourcehq(使用dispatch)的方法是:

val (key, secret, serviceURL) = 
  (properties("ESHQ_KEY"), properties("ESHQ_SECRET"), properties("ESHQ_URL"))

def createSocket(channel: String) = post("/socket", Map("channel" -> channel))

def publish(data: String, channel: String) = post("/event", 
  Map("channel" -> channel, "data" -> data))

private def post(path: String, params: Map[String, String]): ActionResult = {
  val request = url(s"$serviceURL$path") << params << credentials
  Await.result(Http(request).either, 5.seconds).fold(
    {t => InternalServerError(s"Failed to post $request: ${t.getMessage}")},
    {r => Ok(r.getResponseBody)}
  )
}

private def credentials = {
  val time = (System.currentTimeMillis / 1000).toString
  Map("key" -> key, "timestamp" -> time, "token" -> token(key, secret, time))
}

private def token(strings: String*) = {
  val md = java.security.MessageDigest.getInstance("SHA-1")
  md.digest(strings.mkString(":").getBytes("UTF-8")).map("%02x".format(_)).mkString
}

与Ruby客户端一样,createSocketopen)和publishsend)方法都委托给相同的http发布逻辑。

在客户端:

var serverEvents = (function () {

    var eshq = new ESHQ("forkpin");

    // callback called when the connection is made
    eshq.onopen = function(e) {
        console.log("Open event", e);
    };

    // called when a new message with no specific type has been received
    eshq.onmessage = function(e) {
        console.log("Message type: %s, message data: %s", e.type, e.data);
    };

    // callback called on error
    eshq.onerror = function(e) {
        console.log("Error event", e);
    };

    return eshq;

})();

我哪里可能出错?我该如何进一步调试?

2 个答案:

答案 0 :(得分:1)

就我所见,服务器端的所有内容都是正确的。您可以共享用于绑定到ESHQ事件的JavaScript代码吗?

此外,如果您计划开源此Scala客户端,我很乐意在eshq Github组织上进行设置,并为您提供访问权限。

答案 1 :(得分:0)

我用wireshark进一步调试了这个。我发现事件正在发布,但是消息是频道名称,频道名称是消息。我和我的参数混合在一起。

一年没有糕点。