-
Notifications
You must be signed in to change notification settings - Fork 23
Web Service Example Rus
dunnololda edited this page Aug 17, 2012
·
1 revision
Новое апи в Scage v0.9.1 позволяет делать синхронный запрос от клиента на сервер и наоборот - то есть, дожидаться ответа от противоположной стороны. Пример ниже демонстрирует использование этой фичи для построения простого вебсервиса.
import net.scage.support.net.{NetClient, NetServer}
import net.scage.support.State
object ScageWS extends App {
/**
* Sums two numbers
*
* @param a - first number to sum
* @param b - second number to sum
* @return sum of input parameters
*/
def sum(a:Float, b:Float) = a + b
NetServer.startServer(
port = 9800,
onClientQuestion = {(client, question) =>
question.get("sum") match {
case Some(State(("a", a:Float), ("b", b:Float))) => State("sum" -> sum(a, b))
case None => State()
}
}
)
}
object ScageWSClient extends App {
NetClient.startClient(
server_url = "172.16.0.19",
port = 9800
)
def sum(a:Float, b:Float) = {
val answer = NetClient.askServer(State("sum" -> State("a" -> a, "b" -> b)))
answer.value[Float]("sum")
}
while(true) {
val a = (math.random*100).toFloat
val b = (math.random*100).toFloat
val sum_value = sum(a, b)
println(a + " + " + b + " = " + sum_value)
Thread.sleep(1000)
}
}
Вебсервис принимает два числа и возвращает клиенту их сумму. В приведенном примере клиент раз в секунду генерирует два числа, отсылает их серверу, принимает от него сумму и выводит ее в консоль.
Обмен сообщениями происходит по текстовому протоколу поверх TCP/IP. Стороны обмениваются сообщениями в формате json. Запрос выглядит так: {"sum":{"a":5, "b":6}} Ответ от сервера: {"sum":11}