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