2016-02-03 2 views
0

У меня есть контроллер scala, в котором я вызываю внешний веб-сервис, используя WS api of Play! который возвращает json. Тот же api теперь вызывается с использованием WebSocketClient, поскольку каждое соединение должно быть выполнено с использованием WebSocket вместо http. Таким образом, нормальный Action в контроллере преобразуется в функции WebSocket, однако я не могу назвать функцию WebSocket из кода scala. Я искал и прошел через несколько мест в Интернете для решения, но я не нашел решения нигде. Как это можно сделать, вызывая функцию WebSocket и извлекая ее json с помощью WebSocketClient в коде scala, или мы можем сказать, потребляя WebSocket из кода scala? Я нашел похожую на мое questio на SO, но никто не ответил на это! Я хочу знать, возможно ли это в платформе Play?Внедрение WebSocketClient в контроллере Scala

Consume a WebSocket connection using Scala and Play

Edit: Я реализую следующий код:

val c = new AsyncHttpClient() 
val webSocketClient = c.prepareGet("ws://0.0.0.0:9000/testSocket").execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketTextListener { 

    override def onMessage(s: String): Unit = { 
    } 

    override def onOpen(webSocket: websocket.WebSocket): Unit = { 
    webSocket.sendTextMessage("test") 
    } 

    override def onFragment(s: String, b: Boolean): Unit = {} 

    override def onError(throwable: Throwable): Unit = {} 

    override def onClose(webSocket: websocket.WebSocket): Unit = { 
    latch.countDown() 
    } 
}).build()).get() 

val result = webSocketClient.sendTextMessage("true") 
println("================================" + result) 

Переменная result не печатается на консоли дает исключение JSON парсер.

Update: Мой WebSocket соединение в ws://0.0.0.0:9000/testSocket, который находится внутри контроллера Скалигер другого проекта, как в соответствии с:

def sockeTest = WebSocket.tryAccept[JsValue] { request => 
    futureJsonVariable.map { json => 
    val in = Iteratee.ignore[JsValue] 
    // Some database computation here which generated a Future[JsValue] value in futureJsonVariable variable. 
    val out = Enumerator(json).andThen(Enumerator.eof) 
    Right((in, out)) 
    } recover { 
    case err => Left(InternalServerError(err.getMessage)) 
    } 
} 

UPDATE2: И последнее, что я хотел бы спросить о том, что, мы вызываем WebSocket подключение с использованием webSocket.sendMessage("test".getBytes()), которое дает нам ответ WebSocket по переопределенному методу onMessage(). Я хочу знать, как мы можем ждать, пока не поступит ответ WebSocket, чтобы мы могли выполнить требуемые вычисления с данными ответа WebSocket. Я проверил, возвращая переменную Future[JsValue] внутри метода onMessage(), но эта вещь является чем-то недействительным. Итак, как мы можем положить webSocket.sendMessage("test".getBytes()) в ожидании, так что дальнейший код будет выполнен по ответу WebSocket?

ответ

1

Воспроизведение не поддерживает подключения клиентов WebSocket. Самый лучший вариант, вероятно, использовать AsyncHttpClient, это библиотека, игра WS API построен на так уже будет на вашем пути к классам, инструкции по доступу WebSockets, используя его здесь:

https://github.com/AsyncHttpClient/async-http-client

+0

спасибо за ваш ответ , Я прошел через предоставленную вами ссылку github, и я вижу, что реализация кода находится в java. Попробуем реализовать тот же код в scala, когда я работаю с контроллером scala. У вас есть ссылка на ссылку в вашей базе знаний, где эта же реализация предоставляется в scala? –

+0

Я предлагаю вам лучше изучить Скала. Java-код можно тривиально преобразовать в код Scala. –

+0

Я попробовал реализовать код scala из кода Java, предоставленного в вашей указанной ссылке github. Я хочу знать, как, как мне получить выход json, когда WebSocket подключен к scala (при подключении WebSocket подключается, когда мы выполняем 'webSocketVar.sendTextMessage (« test »)?? Я хочу знать, что мне писать внутри переопределенного метод 'onMessage()', чтобы получить json-ответ метода WebSocket, который я подключаю? Я обновил свой вопрос для кода, который я реализую. –

 Смежные вопросы

  • Нет связанных вопросов^_^