小编Art*_*hur的帖子

多个Websockets

我试图在一个页面上使用两个websockets.这是我的代码:

var pageViewWs = new WebSocket("ws://localhost:9002/pageView");
var sessionWs = new WebSocket("ws://localhost:9002/session");

pageViewWs.onmessage = function (event) {
  alert("PageView");
};

sessionWs.onmessage = function (event) {
  alert("Session"); 
};
Run Code Online (Sandbox Code Playgroud)

仅显示PageView警报.在服务器端,没有请求/ session,只有/ pageView.

现在,如果我切换var pageViewWs和var sessionWs,那么会显示Session警报而不是PageView.这不是因为它们是警报,我试图附加到身体和divs,我已经介入使用Firebug.看起来一次只能创建一个WebSocket,尽管在Firebug中,pageViewWs和sessionWs的属性看起来是相同的,除了它们的url.

我只在Firefox 15.0.1中测试过这个.是否存在某种Websocket限制,您一次只能运行一个?或者我的代码出了什么问题?

javascript websocket

16
推荐指数
1
解决办法
2万
查看次数

RabbitMQ QueueingConsumer可能存在内存泄漏

我有以下代码来声明队列:

Connection connection = RabbitConnection.getConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(getQueueName(), false, false, false, null);
consumer = new QueueingConsumer(channel);
channel.basicConsume(getQueueName(), true,consumer);
Run Code Online (Sandbox Code Playgroud)

以及以下内容以获取下一个Delivery对象并对其进行处理:

    Delivery delivery = null;
    T queue = null;

    //loop over, continuously retrieving messages
    while(true) {

        try {
            delivery = consumer.nextDelivery();
            queue = deserialise(delivery.getBody());

            process(queue);

        } catch (ShutdownSignalException e) {
            logger.warn("Shutodwon signal received.");
            break;
        } catch (ConsumerCancelledException e) {
            logger.warn("Consumer cancelled exception: {}",e.getMessage());
            break;
        } catch (InterruptedException e) {
            logger.warn("Interuption exception: {}", e);
            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

反序列化代码.如你所见,我正在使用Kryo:

public T deserialise(byte[] …
Run Code Online (Sandbox Code Playgroud)

java memory-leaks jms rabbitmq

10
推荐指数
1
解决办法
6405
查看次数

Anorm中的原子MySQL事务

我写了一个简单的点击计数器,它使用Anorm更新MySQL数据库表.我希望事务是原子的.我认为最好的方法是将所有SQL字符串连接在一起并进行一次查询,但这似乎不可能与Anorm一起使用.相反,我已将每个选择,更新和提交放在单独的行上.这有效,但我不禁想到他们必须是一个更好的方法.

private def incrementHitCounter(urlName:String) {
  DB.withConnection { implicit connection =>
    SQL("start transaction;").executeUpdate()
    SQL("select @hits:=hits from content_url_name where url_name={urlName};").on("urlName" -> urlName).apply()
    SQL("update content_url_name set hits = @hits + 1 where url_name={urlName};").on("urlName" -> urlName).executeUpdate()
    SQL("commit;").executeUpdate()
  }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以看到更好的方法吗?

mysql scala anorm

5
推荐指数
1
解决办法
1593
查看次数

为什么ReversedLinesFileReader这么慢?

我有一个21.6GB的文件,我想从头到尾阅读它,而不是像往常一样从开头到结尾.

如果我使用以下代码从头到尾读取文件的每一行,则需要1分12秒.

val startTime = System.currentTimeMillis()
File("very-large-file.xml").forEachLine {
    val i = 0
}
val diff = System.currentTimeMillis() - startTime
println(diff.timeFormat())
Run Code Online (Sandbox Code Playgroud)

现在,我已经读过要反向读取文件然后我应该使用ReversedLinesFileReaderApache Commons.我创建了以下扩展函数来做到这一点:

fun File.forEachLineFromTheEndOfFile(action: (line: String) -> Unit) {
    val reader = ReversedLinesFileReader(this, Charset.defaultCharset())
    var line = reader.readLine()
    while (line != null) {
        action.invoke(line)
        line = reader.readLine()
    }

    reader.close()
}
Run Code Online (Sandbox Code Playgroud)

然后以下面的方式调用它,这与前面的方式相同,只是调用forEachLineFromTheEndOfFile函数:

val startTime = System.currentTimeMillis()
File("very-large-file.xml").forEachLineFromTheEndOfFile {
    val i = 0
}
val diff = System.currentTimeMillis() - startTime
println(diff.timeFormat())
Run Code Online (Sandbox Code Playgroud)

这需要17分50秒才能运行!

  • ReversedLinesFileReader是以正确的方式使用的吗?
  • 我在SSD上运行带有Ext4文件系统的Linux …

java kotlin apache-commons-io

5
推荐指数
1
解决办法
2146
查看次数

为什么Anorm在将主键作为文本插入时会抛出TypeDoesNotMatch异常?

我在Postgres 9.4中有一个表,其中包含电子邮件地址作为主键.使用Anorm,然后执行以下操作

 DB.withConnection { implicit connection =>
  SQL"insert into member_login_email(email, password) values ($email, $password)".executeInsert()
}
Run Code Online (Sandbox Code Playgroud)

执行此操作时,会将正确的值输入到表中,但会抛出TypeDoesNotMatch运行时异常:

    at play.api.Application$class.handleError(Application.scala:296) ~[play_2.11-2.3.7.jar:2.3.7]
    at play.api.DefaultApplication.handleError(Application.scala:402) [play_2.11-2.3.7.jar:2.3.7]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.7.jar:2.3.7]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.7.jar:2.3.7]
    at scala.Option.map(Option.scala:145) [scala-library-2.11.1.jar:na]
Caused by: java.lang.RuntimeException: TypeDoesNotMatch(Cannot convert dsfsfadsf@ddd.com: class java.lang.String to Long for column ColumnName(member_login_email.email,Some(email)))
    at scala.sys.package$.error(package.scala:27) ~[scala-library-2.11.1.jar:na]
    at anorm.Sql$.anorm$Sql$$as(Anorm.scala:472) ~[anorm_2.11-2.3.7.jar:2.3.7]
    at anorm.Sql$class.executeInsert(Anorm.scala:350) ~[anorm_2.11-2.3.7.jar:2.3.7]
    at anorm.SimpleSql.executeInsert(Anorm.scala:190) ~[anorm_2.11-2.3.7.jar:2.3.7]
    at repository.MemberLoginEmailRepository$$anonfun$create$1.apply(MemberLoginEmailRepository.scala:17) ~[classes/:na]
Run Code Online (Sandbox Code Playgroud)

似乎Anorm期望主键为Long类型.无论如何让Anorm接受Text类型的主键而不抛出异常?

我查看了Anorm源代码,但一直在努力查看实际发生的情况.

postgresql scala anorm postgresql-9.4

3
推荐指数
1
解决办法
649
查看次数

语法错误:"("从IntelliJ启动Tomcat时出现意外

我无法通过IntelliJ运行我的Tomcat服务器.这是在上周工作.每次我跑,我都会收到以下错误:

/home/arthur/apps/apache-tomcat-9.0.16/bin/catalina.sh run
Disconnected from server
/home/arthur/apps/apache-tomcat-9.0.16/bin/catalina.sh: 1: eval: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

  • 一个不同的Tomcat目录
  • 更改了tomcat目录的权限
  • 从同事那里复制了一个已知的有效Tomcat安装
  • 重新启动了我的电脑
  • 尝试从终端启动Tomcat.这有效,但我想了解为什么它不能从IntelliJ工作.

从上周开始,我已经为我的操作系统安装了最新的安全更新.

操作系统:Ubuntu 18.04.2 LTS

IntelliJ:2018.3.4(终极版)

Tomcat:7.0.85,8.5.37,9.0.16

tomcat intellij-idea

3
推荐指数
1
解决办法
1585
查看次数

将Liferay从Oracle迁移到MySQL时应该考虑什么?

我们目前正在运行Liferay 6.0.6连接到Oracle 11.2.0.2.0.由于有关Oracle许可的业务要求,我需要调查使用InnoDB将其移至MySQL 5.5.此迁移可以接受停机时间.

  • 我可以只复制代码和数据结构吗?
  • 使用MySQL的新安装是否最佳,然后从Oracle安装中复制数据?
  • 以前有人在这做过吗?

mysql migration oracle liferay

1
推荐指数
1
解决办法
957
查看次数

从Scala中的匹配结果递归构建列表

我是Scala的新手,所以我只是在试验.以下代码在D:\ Downloads下递归打印出所有文件的名称:

import java.io.File

object Run {
  def main (args: Array[String]){
    //read each file
    val f = new File("""D:\Downloads""");
    listFiles(f)
  }

  def listFiles(f: Any): Unit= f match{
    case f:File if f.isDirectory => f.listFiles().deep.foreach(listFiles(_))
    case f:File if f.isFile => println(f.getName)
    case _ => Unit
  }
}
Run Code Online (Sandbox Code Playgroud)

这有效.现在,我想listFiles建立一个字符串列表并返回它.这就是我所做的:

  def listFiles(f: Any): List[String] = f match{
    case f:File if f.isDirectory => f.listFiles().foreach(listFiles(_))
    case f:File if f.isFile => List(f.getName)
    case _ => Nil
  }
Run Code Online (Sandbox Code Playgroud)

当f是目录时,foreach应递归调用listFiles并返回List.如何将所有这些数组连接在一起并返回它们?有没有更好的方法呢?

scala

1
推荐指数
2
解决办法
1838
查看次数