Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 连接上的Jetty WebSocket,创建端接时不闭合的管道_Scala_Websocket_Jetty_Akka_Future - Fatal编程技术网

Scala 连接上的Jetty WebSocket,创建端接时不闭合的管道

Scala 连接上的Jetty WebSocket,创建端接时不闭合的管道,scala,websocket,jetty,akka,future,Scala,Websocket,Jetty,Akka,Future,我正在使用jetty websocket客户端连接到websocket服务器。在每个成功的连接上,它都会创建大约35个文件描述符,其中32个是管道。终止时,这些管道不会关闭 class AMPWebSocketClient(remoteHost: String, remoteHandler: String) { val logger: Logger = LoggerFactory.getLogger(this.getClass) //1. Create Context priva

我正在使用jetty websocket客户端连接到websocket服务器。在每个成功的连接上,它都会创建大约35个文件描述符,其中32个是管道。终止时,这些管道不会关闭

class AMPWebSocketClient(remoteHost: String, remoteHandler: String) {

  val logger: Logger  = LoggerFactory.getLogger(this.getClass)
  //1. Create Context
  private var masterAMPClient = new WebSocketClientContext()
                                      .setTrustStore(C.GLASS_KEY_STORE)
                                      .setPassword(C.DEFAULT_KEYSTORE_PASSWORD)
                                      .buildSecureClient

  private var client = createSession(remoteHost, remoteHandler)
  private var session: Session = _
  private var socket: MasterAMPFeeder = _

  private def createSession(remoteHost: String, remoteHandler: String): MasterAMPFeeder = {
    //2. Connect to WebSocket Server
      var future = ""
      var success = false
      var generatedURI: String = "wss://" + remoteHost + "/decoder/" + remoteHandler
    socket = new MasterAMPFeeder()

      do {
      try {
          masterAMPClient.getPolicy.setIdleTimeout(TimeUnit.DAYS.toMillis(1))
          masterAMPClient.start()
          val destURI: URI = new URI(generatedURI)
          val request: ClientUpgradeRequest = new ClientUpgradeRequest()
          val future = masterAMPClient.connect(socket, destURI, request)
          logger.debug("Before connection")
          session = future.get(C.ONE_SECOND * 15, TimeUnit.SECONDS)
          session.setIdleTimeout(TimeUnit.DAYS.toMillis(1))
          logger.debug("Waiting for GlassDecoder to accept the connection")
            socket.getLatch().await()
          logger.debug("Connected to GlassDecoder")
      } catch {
          case e: Exception => {
            logger.debug("Not able to connect to WebSocket: {}", e.getStackTrace)
            logger.warn("Retrying to connect to: {}", generatedURI)
            Thread.sleep(10 * C.ONE_MILLISECOND)
        }
      }
      } while(socket.isNotConnected)

    return socket
  }

我不知道什么是scala/akka管道,但如果它与Java线程相关,那么这听起来像是线程池和选择器的客户端默认值(在您的示例中您似乎没有配置)我如何配置线程池和选择器?@JoakimErdfelt我试图限制线程私有隐式val ec=ExecutionContext.fromExecutor(Executors.newFixedThreadPool(4))。它没有帮助。它仍然在创建32个管道。我不知道什么是scala/akka管道,但是如果它与Java线程相关,那么这听起来像是线程池和选择器的客户端默认值(在您的示例中似乎没有配置)如何配置线程池和选择器?@JoakimErdfelt我试图限制线程私有隐式val ec=ExecutionContext.fromExecutor(Executors.newFixedThreadPool(4))。它没有帮助。它仍在创建大约32个管道