Multithreading 使用socket的Scala客户机-服务器多线程
我在这里想不起这个 我是Scala的初学者,刚出生几周,尝试过,但失败了 我读过并尝试过关于演员、未来等的书籍,但这些都不适合我 您能否提供一个服务器客户端示例(或至少是服务器端)的代码 假设使用一个套接字打开连接,该套接字从多个客户端接收字符串(即文件路径),并在一个线程中处理每个客户端Multithreading 使用socket的Scala客户机-服务器多线程,multithreading,scala,sockets,client-server,Multithreading,Scala,Sockets,Client Server,我在这里想不起这个 我是Scala的初学者,刚出生几周,尝试过,但失败了 我读过并尝试过关于演员、未来等的书籍,但这些都不适合我 您能否提供一个服务器客户端示例(或至少是服务器端)的代码 假设使用一个套接字打开连接,该套接字从多个客户端接收字符串(即文件路径),并在一个线程中处理每个客户端 import java.net.{Socket, ServerSocket} import java.util.concurrent.{Executors, ExecutorService} import j
import java.net.{Socket, ServerSocket}
import java.util.concurrent.{Executors, ExecutorService}
import java.util.Date
import java.io._
import scala.io._
import java.nio._
import java.util._
import scala.util.control.Breaks
import java.security.MessageDigest
import java.security.DigestInputStream
import scala.util.Sorting
class NetworkService(port: Int, poolSize: Int) extends Runnable {
val serverSocket = new ServerSocket(port)
val pool: ExecutorService = Executors.newFixedThreadPool(poolSize)
def run() {
try {
var i = 0
while (true) {
// This will block until a connection comes in.
val socket = serverSocket.accept()
val in = new BufferedReader(new InputStreamReader(socket.getInputStream)).readLine
/*var f = new FileSplit(in) //FileSplit is another class that i would like each
// client's sent string to be passed as an instance of
f.move*/
pool.execute(new Handler(socket))
}
} finally {
pool.shutdown()
}
}
}
class Handler(socket: Socket) extends Runnable {
def message = (Thread.currentThread.getName() + "\n").getBytes
def run() {
socket.getOutputStream.write(message)
socket.getOutputStream.close()
}
}
object MyServer {
def main(args: Array[String]) {
(new NetworkService(2030, 2)).run
}
}
你有几个选择。您可以使用相同的java风格的应用程序,基本上只使用java标准库和scala语法 也许这有助于: 您只需要编写逻辑来处理新线程中的每个套接字(从accept()获得的套接字) 然而,我不建议直接使用普通的旧java方法。有很多很好的库可以为您处理这些问题。例如阿克卡:
我还想敦促您阅读有关futures的内容,因为它们对于异步操作非常有用。这里是Scala中TCP服务器与Akka IO的示例:plz zend me da codez?你尝试了什么?你在哪里失败了?我们可以提供帮助。添加了试用代码,您可以看看“它对我不起作用”是不够的。你被困在哪里?哪些部件工作/不工作?症状是什么?您尝试过什么?我特别擅长从每个客户端接收线程字符串,并在其自己的线程(或参与者)上处理它。[val in=new BufferedReader(new InputStreamReader(socket.getInputStream)).readLine]不能在while循环之外处理,因为它的值会根据客户端的不同而变化