我正在尝试找到实时从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")
}
答案 0 :(得分:2)
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编写自己的Comet,Stream或Websocket服务器。 您还可以查看this project获取灵感。