web-dev-qa-db-ja.com

Scala pythonエコーサーバー/クライアントの例と同等ですか?

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
20
Andriy Drozdyuk

標準ライブラリ内で次のことができます。

// 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 をお勧めします。

31

Akka IOとIterateesを使用して、単純なコマンドベースのソケットサーバーを作成する方法についてのブログ投稿を書きました。

多分それは興味深いかもしれません。

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

3
Leon Radley

Javaソケットを使用する必要があります。Scalaソケットサーバー/クライアントの良い例を次の場所で見つけました: http:// www。 scala-lang.org/node/55

2
Marcelo

netty Javaライブラリを使用できます。Scalaでの使用例を次に示します。

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

通常、Java Socket APIを使用する必要があります。 この例 Java Socket APIが使用されますが、サーバー全体がラップされています。アクセプタースレッドをブロックせずに別のスレッドでクライアントを処理するためのアクター(Javaで通常行うのと同じことですが、スレッドを直接使用します)。

0
tenshi

Josh Suerethは最近 scalaz Iterateesを使用したNIOエコーサーバーの例 を投稿しました。 scalaz ライブラリが必要です

0
oxbow_lakes