2013-01-23 50 views
2

我正在尋找一些簡單和簡短的例子來說明如何連接並與tcp socket進行交互(雙向)。換句話說,如何編寫一個scala 2.10應用程序(使用akka-camelnetty庫)與tcp進程(套接字)進行通信。scala 2.10,akka-camel tcp socket通信

我在互聯網上發現了很多文獻,但一切都很陳舊(尋找斯卡拉2.10)和/或不推薦使用。

在此先感謝!

+0

你能澄清這個問題嗎?你提到阿卡,這是一個基於Akka的應用程序嗎?如果你想使用Netty,什麼是障礙? Netty是基於Java的,所以它完全獨立於Scala版本。 –

+0

抱歉有混淆。我更喜歡基於駱駝的解決方案(但如果你知道netty的例子,我也可以)。 – xhudik

+0

@sourcedelica看看我的評論克勞斯的回答 – xhudik

回答

2

嗯,我一直在尋找這樣的事情:

1.服務器:

import akka.actor._ 
import akka.camel.{ Consumer, CamelMessage } 

class Ser extends Consumer { 
    def endpointUri = "mina2:tcp://localhost:9002" 
    def receive = { 
    case message: CamelMessage => { 
    //log 
    println("looging, question:" + message) 
    sender ! "server response to request: " + message.bodyAs[String] + ", is NO" 
    } 
    case _ => println("I got something else!??!!") 
    } 
} 

object server extends App { 

val system = ActorSystem("some") 
val spust = system.actorOf(Props[Ser]) 
} 

2.客戶端:

import akka.actor._ 
import akka.camel._ 
import akka.pattern.ask 
import scala.concurrent.duration._ 
import akka.util.Timeout 
import scala.concurrent.Await 

class Producer1 extends Actor with Producer { 
    def endpointUri = "mina2:tcp://localhost:9002" 
    } 

object Client extends App { 

implicit val timeout = Timeout(10 seconds) 
val system2 = ActorSystem("some-system") 
val producer = system2.actorOf(Props[Producer1]) 
val future = producer.ask("Hello, can I go to cinema?") 

val result = Await.result(future, timeout.duration) 
println("Is future over?="+future.isCompleted+";;result="+result) 

println("Ende!!!") 
system2.shutdown 
println("system2 ended:"+system2.isTerminated) 

我知道這是http://doc.akka.io/docs/akka/2.1.0/scala/camel.html中編寫和描述的一切。但是,如果你是新手,你需要閱讀它所有和幾次,以建立非常簡單的客戶端 - 服務器應用程序。我認爲某種「動機榜樣」會更受歡迎。

1

我假設你已經檢查過Akka文檔? http://doc.akka.io/docs/akka/2.1.0/scala/camel.html

在Akka 2.1.0中,他們改進了akka-camel模塊,使其完全保持最新狀態(之前有點過時)。

還有一個駱駝阿卡視頻演示,涵蓋了現實生活中的使用情況:http://www.davsclaus.com/2012/04/great-akka-and-camel-presentation-video.html

+0

是的,我當然發現了http://doc.akka.io/docs/akka/2.1.0/scala/camel.html,但它似乎也過時了(例如:組件mina被mina2取代了幾年之前......) - 所以你需要很多時間來查找所有問題並將代碼片段放在一起。但是,您的第二個鏈接看起來很有用 - 謝謝! – xhudik

+0

我看到你是駱駝的提交者,看看我的回答:http://stackoverflow.com/a/14536536/1408096,怎麼樣才能添加一些簡單的例子到http://doc.akka.io/docs/akka /2.1.0/scala/camel.html? – xhudik

+1

你需要問Akka團隊這樣做。它的項目和文件 –