gpt4 book ai didi

sockets - 随后调用Actor Freeze计划

转载 作者:行者123 更新时间:2023-12-03 11:56:57 25 4
gpt4 key购买 nike

我把下面的代码放在一起;目的是让非阻塞服务器接受连接,然后将该连接传递给参与者以进行进一步处理。这是第一次运行,但是在随后的请求下,程序冻结在conServ ! servSoc.accept。任何想法为什么会这样?

import java.net._
import java.io._

import java.nio._
import java.nio.channels._

import java.util._

import scala.actors.Actor
import scala.actors.Actor._

def test() = {
var channel: ServerSocketChannel = null
val isa: InetSocketAddress = new InetSocketAddress(23)

val conServ = actor {
react {
case conn: Socket => {
try {
var pw: PrintWriter = new PrintWriter(conn.getOutputStream(), true)
pw.println("Current time: " + new Date)
pw.close
conn.close
} catch {
case ioe: IOException => println("IOException: " + ioe.getMessage)
case e: Exception => println("Exception: " + e.getMessage)
}
}
}
}

try {
channel = ServerSocketChannel.open
channel.configureBlocking(false)
channel.socket().bind(isa)
var selector: Selector = Selector.open
channel.register(selector, SelectionKey.OP_ACCEPT)
println("** Server ready for requests **")

while (true) {
if (selector.select > 0) {
var selKeys: Set[SelectionKey] = selector.selectedKeys
var selIt: Iterator[SelectionKey] = selKeys.iterator
while (selIt.hasNext) {
var key: SelectionKey = selIt.next.asInstanceOf[SelectionKey]
selIt.remove
if (key.isAcceptable) {
var ssc: ServerSocketChannel = key.channel.asInstanceOf[ServerSocketChannel]
var servSoc: ServerSocket = ssc.socket
try {
conServ ! servSoc.accept
} catch {
case ioe: IOException => println(ioe.printStackTrace)
}
}
}
} else {
continue
}
}

} catch {
case ioe: IOException => println("Could not listen to port 23. " + ioe.printStackTrace)
case e: Exception => println("Error: " + e.printStackTrace)
}
}

test

最佳答案

react括在loop块中,如下所示:

val conServ = actor { 
loop {
react {
// ...
}
}
}

现在发生的是,您的角色已启动,正在处理第一条消息,并且不再“ react ”以处理其队列中的其他消息。

参见 An actor's act method that uses loop

关于sockets - 随后调用Actor Freeze计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5919119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com