小编sim*_*905的帖子

使用Sec-WebSocket-Key识别websocket客户端连接是一个好主意吗?

在servlet世界中,我会找到像cookies和HttpSession这样的东西来识别谁正在使用我的restful服务来将请求路由到正确的数据.使用Sec-WebSocket-Key是一个好主意,好像它是一个识别客户端连接的cookie?

具体来说,我使用socko scala库(基于netty的akka​​ webserver)从socko-examples的演示应用程序开始实现websocket服务器.Socko正在包装一个netty Channel并将netty WebSocketFrame传递给应用程序代码.然后,我想根据客户端连接的"某些身份"发送传入数据的帧,我之前已将其与最终用户数据(例如他们的购物篮)相关联.为此,我编写了扩展方法来公开Sec-WebSocket-Key http标头,就好像它是通过挖掘原始websocket握手中的http标头进入应用程序的对象的顶级属性:

package org.mashupbots.socko.examples.websocket

// pimp my library pattern to add extension method
object ChatWebSocketExtensions {
  import org.mashupbots.socko.events.WebSocketFrameEvent

  class WebSocketFrameEventWithSecWebSocketKey(wsFrame: WebSocketFrameEvent) {
    def secWebSocketKey: String = { 
      wsFrame.initialHttpRequest.headers.get("Sec-WebSocket-Key").getOrElse("null") 
    }
  }
  implicit def webSocketFrameEventWithSecWebSocketKey(wsFrame: WebSocketFrameEvent) = new WebSocketFrameEventWithSecWebSocketKey(wsFrame)

  import org.mashupbots.socko.events.WebSocketHandshakeEvent;

  class WebSocketHandshakeEventWithSecWebSocketKey(event: WebSocketHandshakeEvent) {
    def secWebSocketKey: String = {
      val option = Option(event.nettyHttpRequest.getHeader("Sec-WebSocket-Key"))
      return option.getOrElse("null");

    }
  }
  implicit def webSocketHandshakeEventWithSecWebSocketKey(event: WebSocketHandshakeEvent) = new WebSocketHandshakeEventWithSecWebSocketKey(event)

}
Run Code Online (Sandbox Code Playgroud)

这只是一些语法糖,因此应用程序代码不必在低级别对象中挖掘以获取Sec-WebSocket-Key标头并只是访问它,就像它是第一类属性一样:

  val routes = Routes({
    case WebSocketHandshake(wsHandshake) => wsHandshake …
Run Code Online (Sandbox Code Playgroud)

websocket netty

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

如何从JVM中检测长gc?

如何检测超过某个配置的应用程序超时的 GC(编辑或任何停顿),以便我可以记录警告(或动态延长超时)?

编辑我不是在寻求替代方案或解决方法,例如监控。我正在编写一个库,我无法控制环境或设置。虽然我会清楚地记录该库的用户必须设置适当的超时,但我仍然希望人们忽略几年后更改 jvm 堆设置并忘记增加超时的情况。如果我可以在库日志中警告可能的暂停大于配置的超时,则支持会更简单。它不一定是完美的检测“足够好”会减少图书馆用户没有设置合理的超时时间浪费的时间。

编辑并明确指出,即使存在大型 GC,库也能正常工作,但有充分的理由选择良好的超时时间,即检测崩溃,以便库尝试连接到备用对等方。

java garbage-collection

3
推荐指数
2
解决办法
2243
查看次数

为什么 paxos proposalId 需要是唯一的

谁能告诉我为什么提案 Id 在 Paxos 中需要是唯一的?我认为这个proposalId需要唯一的原因是我们需要使用它来拒绝旧提案并对最大投票进行排序。所以如果我们做第一阶段:acceptor 只接受大于promiseId 的提议并且是增量的,它仍然可以保证一致性。

我们假设提议者 A 向接受者提出了一个提议 (proposalId x, value y),然后他得到了多数同意的答复,另一个具有相同提议 id(x) 的提议者 B 发出提议请求,这个提议者 B 将被拒绝,对吧? 最终,我们仍然可以达到一致性,对吧?

paxos

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

在 Mac 上安装/运行 GraalVM 的问题

我使用的是在防火墙后面运行的 MacOS Catalina 10.15.7 计算机。

\n

我开始评估 Micronaut 和 Quarkus 作为 Spring boot 的替代品,其主要原因之一是能够编译为本机映像。

\n

为了能够做到这一点,我必须安装 GraalVM。我按照此处GraalVM Community Edition 20.3.0 的说明下载了 graalvm-ce-java11-darwin-amd64-20.3.0.tar.gz,将其解压缩到我选择的文件夹中,然后导出/Users/myId/work/dev/graalvm/graalvm-ce-java11-20.3.0/Contents/Home/为 GRAALVM_HOME 并添加了 GRALLVM_HOME\\垃圾箱在我的道路上。

\n

之后,我访问https://code.quarkus.io/并上传了一个Hello World要使用 gradle 构建的 Quarkus 项目(6.8)。

\n

当我运行时,gardle build一切都构建正常。\n当我运行时,gradle quarkusDev应用程序启动正常,我可以到达Hello World终点。

\n

但是,当我尝试构建本机映像时,gradle build -Dquarkus.package.type=native出现以下异常

\n
java.lang.RuntimeException: Cannot find the `native-image` in the GRAALVM_HOME, JAVA_HOME and System PATH. Install it using `gu install native-image`\n
Run Code Online (Sandbox Code Playgroud)\n

gu install native-image …

graalvm quarkus graalvm-native-image

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

运算符":\"在这个scala代码中做了什么?

我刚刚在scalacheck文档中遇到过这个问题,并且谷歌在尝试查找":\"运算符的作用时没有太大帮助:

abstract sealed class Tree[T] {
  def merge(t: Tree[T]) = Internal(List(this, t))

  def size: Int = this match {
    case Leaf(_) => 1
    case Internal(children) => (children :\ 0) (_.size + _)
  }
}

case class Internal[T](children: Seq[Tree[T]]) extends Tree[T]

case class Leaf[T](elem: T) extends Tree[T]
Run Code Online (Sandbox Code Playgroud)

还有人有任何提示,如何搜索除了通过模糊的scaladoc拖网之外的这些时髦的符号?

谢谢

scala

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

模拟特征的ScalaMock给出"MockFunction1不能转换为StubFunction1"

以下代码:

import org.scalamock.scalatest.MockFactory
import org.scalatest.FlatSpec

trait SomeTrait {
  def getLongByInt(int: Int): Long
}

class TestScalaMock extends FlatSpec with MockFactory {
  "Scala Mock" should "mock my trait" in {
    val someTrait = mock[SomeTrait]
    (someTrait.getLongByInt _) when (1) returns 2L
    assert(2L == someTrait.getLongByInt(1))
  }
}
Run Code Online (Sandbox Code Playgroud)

给我一个运行时错误org.scalamock.MockFunction1 cannot be cast to org.scalamock.StubFunction1.我的项目依赖项是:

scalaVersion := "2.11.0"

libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-actor" % "2.3.7",
  "com.typesafe.akka" %% "akka-testkit" % "2.3.7",
  "org.scalatest" % "scalatest_2.11" % "2.2.1" % "test",
  "org.scalamock" %% "scalamock-scalatest-support" % "3.2" % …
Run Code Online (Sandbox Code Playgroud)

scala scalamock

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

Scylladb需要的内存与数据集一样多吗?

看看如何在compose.com上描述Scylla,它说:

Scylla需要快速IO和与总数据大小一样多的RAM.

然而,看看已发布的体系结构,似乎它不需要像刷新到磁盘那样多的RAM总数据大小:

Scylla将数据保存在磁盘上.写入Scylla最初是在memtables中的RAM中累积的,它在某些时候被刷新到磁盘上的sstable并从RAM中删除.

对于那些宣传极端性能的项目而言,似乎很传统,没有提及获得该性能所需的任何调整(例如,通过关闭这些基准测试功能来牺牲数据安全性,或者不提及必须将所有内容都安装在RAM中以实现已发布的结果) .

我想知道是否所有内容都需要适合ram,或者只有当它全部适合RAM时才会得到基准测试结果,或者compose.com完全错误(或过时)?

不幸的是,谷歌搜索问题没有给出一个明确的答案所以我认为关于SO的问题会阻止其他人混淆.

scylla

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

使用awk过滤掉无法识别的字段

我有一个CVS文件,我希望有一些值,如YN.人们正在添加评论或任意条目,例如NA?我要删除的条目:

Create,20055776,Y,,Y,Y,,Y,,NA?,,Y,,Y,Y,,Y,,,Y,,Y,,,Y,,,,,,,,
Create,20055777,,,,Y,Y,,Y,,,,Y,,Y,Y,,Y,,,Y,,Y,,,Y,,,,,,,,
Create,20055779,,Y,,,,,,,,Y,,,NA ?,,,Y,,,,,,TBD,,,,,,,,,
Run Code Online (Sandbox Code Playgroud)

我可以gsub用来删除我期待的东西,例如:

$ cat test.csv | awk '{gsub("NA\\?", ""); gsub("NA \\?",""); gsub("TBD", ""); print}'
Create,20055776,Y,,Y,Y,,Y,,,,Y,,Y,Y,,Y,,,Y,,Y,,,Y,,,,,,,
Create,20055777,,,,Y,Y,,Y,,,,Y,,Y,Y,,Y,,,Y,,Y,,,Y,,,,,,,,
Create,20055779,,Y,,,,,,,,Y,,,,,,Y,,,,,,,,,,,,,,,
Run Code Online (Sandbox Code Playgroud)

然而,如果有人添加新评论,那将会破裂.我正在寻找一个正则表达式来将比赛概括为"不是Y".

我尝试了一些消极的外观,但无法让它在我拥有的awk上工作GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.1, GNU MP 6.1.2).提前致谢!

linux awk

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