1
я пишу эхо-приложение, которое send
и receive
'\0'
завершённая строкаscalaz потока TCP `echo` приложение не работает
https://gist.github.com/jilen/10a664cd588af10b7d09
object Foo {
implicit val S = scalaz.concurrent.Strategy.DefaultStrategy
implicit val AG = tcp.DefaultAsynchronousChannelGroup
...
def runServer() {
def writeStr(str: String) = tcp.write(ByteVector(str.getBytes))
val echoServer = (readStr |> serverLog("[Server] Receiving")).flatMap(writeStr)
val server = tcp.server(addr, concurrentRequests = 1)(echoServer.repeat)
server.flatMap(_.drain).run.run
}
def runClient() {
val topic = async.topic[String]()
val echoClient = (topic.subscribe |> clientLog("[Client] Inputing")).map { str =>
tcp.write(ByteVector(str.getBytes) ++ Delimiter) ++ (readStr |> clientLog("[Client] Receiving"))
}
val client = tcp.connect(addr)(tcp.lift(echoClient))
client.run.runAsync(println)
io.stdInLines.to(topic.publish).run.run
}
}
Foo.runServer()
Я бегу и Foo.runClient()
на другом терминале
И введите номера 1 2 3 ... с клиентской консоли, но клиент не получит ответа.
Что случилось с моим эхо-приложение?
что тип сервера? его 'Процесс [Задача, Процесс [Задача, Throwable \/A]]]' правильно? Итак, 'server.run.run' - это' Process [Task, Throwable \/A] ', который вы выбрасываете, не так ли? – stew
@stew Как запустить сервер? – jilen
Я прав о типах? если да, тогда вам кажется, что вы должны запускать этот процесс, а не бросать его. – stew