【问题标题】:How to get real-time communication between JavaScript and Scala如何在 JavaScript 和 Scala 之间获得实时通信
【发布时间】:2015-09-07 00:40:23
【问题描述】:

我正在尝试找到从 Scala 到 JavaScript 的实时通信的最佳解决方案。
到目前为止测试了几个想法,但是给定的库必须每秒处理大约 1000 个请求,并不是每个解决方案都是最好的。
下面附上其中一种方法。 if (modulo == 0) 语句需要一些快速库来将事件推送到前端。

您如何看待 vert.x 及其 pub 子库? https://github.com/vert-x/vertx-examples/tree/master/src/raw/scala/pubsub
这个库每秒可以处理 1000 个请求吗?与此https://github.com/vert-x/vertx-examples/tree/master/src/raw/scala/websockets 相同的问题 我正在尝试这个推送消息库https://www.scaledrone.com/,但它一开始就失败了(每秒只有 10 个请求)。

或者也许我期望很高,并且以简单的方式实现这么多的要求并不容易。我正在使用 Redis,它具有 pub 子协议。那么也许有一些简单的方法可以在前端将数据从 Redis 推送到 JavaScript?

private def checkQueue(r: RedisClient, numbers: List[Int]): Unit = {
    val d1 = new Date()
    val format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    val now = new Date()
    for (nr <- numbers) {
        val ranges = r.hkeys("user_" + nr + ":soldier:queue_time")
        ranges match {
            case Some(ss) => for (range <- ss) {
                val added_time = r.hget("user_" + nr + ":soldier:queue_time", range)
                val saved = format.parse(added_time.get)
                val diff = (now.getTime - saved.getTime) / 1000 // diff in sec
                val interval = r.hget("user_" + nr + ":soldier:interval", range)
                val modulo = diff % interval.get.toInt
                if (modulo == 0) {
                    val queue_amount = r.hget("user_" + nr + ":soldier:queue_amount", range)
                    if (queue_amount.get.toInt >= 1) {
                        r.hincrby("user_" + nr + ":soldier:amount", range, 1)
                        r.hincrby("user_" + nr + ":soldier:queue_amount", range, -1)
                    }
                }
            }
            case None =>
        }
    }
    val d2 = new Date()
    println("loop time: " + (d2.getTime - d1.getTime) + " milliseconds")
}

【问题讨论】:

    标签: javascript scala websocket redis publish-subscribe


    【解决方案1】:
    So maybe there is some easy way to push data from Redis to JavaScript at the frontend?
    

    检查Webdis它为Redis提供了HTTP接口。包括 Pubsub 功能:

    Pub/Sub using Transfer-Encoding: chunked, works with JSONP as well. Webdis can be used as a Comet server.
    

    您还可以使用 Play 编写自己的 CometStreamWebsocket 服务器。 您也可以查看this project 以获得灵感。

    【讨论】:

      猜你喜欢
      • 2013-02-14
      • 1970-01-01
      • 2010-12-12
      • 2012-08-16
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多