Scala-эквивалент примера эхо-сервера / клиента Python? - PullRequest
19 голосов
/ 20 июня 2011

Все "серверные" примеры в scala используют актеров, реакторы и т.д ...

Может кто-нибудь показать мне, как написать простой мертвый простой эхо-сервер и клиент, как в следующем примере Python для Сервер и Клиент :

# 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

Ответы [ 5 ]

31 голосов
/ 21 июня 2011

В стандартной библиотеке вы можете делать следующее:

// 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 .

3 голосов
/ 13 августа 2012

Я только что написал сообщение в блоге об использовании Akka IO и Iteratees для создания простого сокет-сервера на основе команд.

Может быть, это может быть интересно.

http://leon.radley.se/2012/08/akka-command-based-socket-server/

2 голосов
/ 20 июня 2011

Вы должны использовать Java Sockets.Я нашел хороший пример Scala Socket Server / Client по адресу: http://www.scala -lang.org / node / 55

0 голосов
/ 20 июня 2011

Джош Суерет недавно опубликовал пример эхо-сервера NIO с использованием скаратованных итераций .Требуется библиотека scalaz

0 голосов
/ 20 июня 2011

Вы можете использовать netty Java-библиотеку.Вот пример использования в Scala:

https://github.com/mcroydon/scala-echo-server

Как правило, вам нужно использовать Java Socket API.В этот пример используется API Java Socket, но весь сервер обернут в Actor для обработки клиентов в отдельном потоке, а не для блокировки потока-приемника (то же самое, что вы обычно делаете в Java, нобудет использовать темы напрямую).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...