我有一个Java jar,可以在特定端口上生成tcp流。
我使用java -jar runner.jar
之类的java命令运行此命令,这开始在端口8888上生成消息流。
当我做nc -l 8888
时,我可以看到消息。
我想使用Scala和其他框架或工具(例如akka,akka-stream)阅读此流。
任何人都可以帮助我理解阅读此tcp流的最佳工具,框架或任何其他技术。
我尝试通过以下代码使用akka流:-
implicit val system = ActorSystem()
implicit val mater = ActorMaterializer() val ss = Tcp().outgoingConnection("127.0.0.1", 8888)
.to(Sink.foreach(println(_)))
Source.empty.to(ss).run()
我也尝试过
Tcp().outgoingConnection(new InetSocketAddress("127.0.0.1", 8888))
.runWith(Source.maybe[ByteString], Sink.foreach(bs => println(bs.utf8String)))
这不起作用。
我只需要阅读消息并自行处理即可。
谢谢
答案 0 :(得分:0)
据我了解,您想设置TCP服务器,下面是TCP Echo using akka streams
的示例def server(system: ActorSystem, address: String, port: Int): Unit = {
implicit val sys = system
import system.dispatcher
implicit val materializer = ActorMaterializer()
val handler = Sink.foreach[Tcp.IncomingConnection] { conn =>
println("Client connected from: " + conn.remoteAddress)
conn handleWith Flow[ByteString]
}
val connections = Tcp().bind(address, port)
val binding = connections.to(handler).run()
binding.onComplete {
case Success(b) =>
println("Server started, listening on: " + b.localAddress)
case Failure(e) =>
println(s"Server could not bind to $address:$port: ${e.getMessage}")
system.terminate()
}
}