我试图在一个页面上使用两个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限制,您一次只能运行一个?或者我的代码出了什么问题?
我有以下代码来声明队列:
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) 我写了一个简单的点击计数器,它使用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)
任何人都可以看到更好的方法吗?
我有一个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是以正确的方式使用的吗?我在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类型的主键而不抛出异常?
我无法通过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)
我尝试过以下方法:
从上周开始,我已经为我的操作系统安装了最新的安全更新.
操作系统:Ubuntu 18.04.2 LTS
IntelliJ:2018.3.4(终极版)
Tomcat:7.0.85,8.5.37,9.0.16
我们目前正在运行Liferay 6.0.6连接到Oracle 11.2.0.2.0.由于有关Oracle许可的业务要求,我需要调查使用InnoDB将其移至MySQL 5.5.此迁移可以接受停机时间.
我是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 ×3
anorm ×2
java ×2
mysql ×2
javascript ×1
jms ×1
kotlin ×1
liferay ×1
memory-leaks ×1
migration ×1
oracle ×1
postgresql ×1
rabbitmq ×1
tomcat ×1
websocket ×1