Scala эквивалент python echo server/client example?
В примере "сервер" в scala используются актеры, реакторы и т.д.
Может кто-нибудь показать мне, как написать мертвый простой сервер эха и клиент, как и следующий пример python Server и Client:
# A simple echo server
import socket
host = ''
port = 50000
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
while 1:
client, address = s.accept()
data = client.recv(size)
if data:
client.send(data)
client.close()
# A simple echo client
import socket
host = 'localhost'
port = 50000
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send('Hello, world')
data = s.recv(size)
s.close()
print 'Received:', data
Ответы
Ответ 1
Вы можете сделать следующее в стандартной библиотеке:
// Simple server
import java.net._
import java.io._
import scala.io._
val server = new ServerSocket(9999)
while (true) {
val s = server.accept()
val in = new BufferedSource(s.getInputStream()).getLines()
val out = new PrintStream(s.getOutputStream())
out.println(in.next())
out.flush()
s.close()
}
// Simple client
import java.net._
import java.io._
import scala.io._
val s = new Socket(InetAddress.getByName("localhost"), 9999)
lazy val in = new BufferedSource(s.getInputStream()).getLines()
val out = new PrintStream(s.getOutputStream())
out.println("Hello, world")
out.flush()
println("Received: " + in.next())
s.close()
Если вы не против использования дополнительных библиотек, вам может понадобиться Finagle.
Ответ 2
Вам нужно будет использовать Java-сокеты. Я нашел хороший пример Scala Socket Server/Client: http://www.scala-lang.org/node/55
Ответ 3
Я просто написал сообщение в блоге об использовании Akka IO и Iteratees для создания простого сервера сокетов на основе команд.
Возможно, это может быть интересно.
http://leon.radley.se/2012/08/akka-command-based-socket-server/
Ответ 4
Вы можете использовать netty. Вот пример использования в Scala:
https://github.com/mcroydon/scala-echo-server
Как правило, вам необходимо использовать Java Socket API. В в этом примере используется API Java Socket, но весь сервер завернут в Actor, чтобы обрабатывать клиентов в отдельном потоке, а не блокировать акцепторную нить (то же самое, что вы обычно делаете на Java, но вы будете использовать потоки напрямую).
Ответ 5
Недавно Джош Суэрет опубликовал пример примера эхо-сервера NIO с использованием итераций scalaz. Требуется библиотека scalaz