使用 Lagom 保护 websockets
Secure websockets with Lagom
使用 lightbend Lagom 框架,我正在尝试连接到 Binance 的 websocket api。
但是,我在连接时不断收到以下错误消息:
400 The plain HTTP request was sent to HTTPS port
是否可以从 Lagom 连接到安全的 websocket 服务?那么使用 WebSocketClient 呢?
我有以下代码:
trait BinanceStreamingService extends Service {
def depthStream(symbol: String): ServiceCall[NotUsed, Source[DepthEvent, NotUsed]]
override final def descriptor = {
import Service._
import me.koopal.crypto.api.BinanceModelsMarshallers._
named("depth-stream")
.withCalls(
restCall(GET, "/ws/:symbol@deth", depthStream _)
)
}
}
private val binanceStreamApplication = new LagomClientApplication("binance-ws") with StaticServiceLocatorComponents with AhcWSComponents {
override def staticServiceUri = URI.create("wss://stream.binance.com:9443")
}
override def stream = ServiceCall { _ =>
binanceStreamClient.depthStream("bnbbtc")
.invoke()
.map { s =>
s.runForeach(e => println(e))
}.onComplete {
case Success(x) => println("success", x)
case Failure(ex) => println("failure", ex)
}
Future.successful("test")
}
可在此处找到运行代码示例:https://github.com/stijnkoopal/lagom-binance-websockets
Lagom 的WebSocket 客户端还不支持TLS。使用 Akka HTTP, which will enable TLS support: https://github.com/lagom/lagom/issues/895
重新实现客户端有一个悬而未决的问题
同时,最好的方法是使用 Akka HTTP Client-Side WebSocket Support 或其他支持安全连接的 WebSocket 客户端库来实现您的客户端。
使用 lightbend Lagom 框架,我正在尝试连接到 Binance 的 websocket api。
但是,我在连接时不断收到以下错误消息:
400 The plain HTTP request was sent to HTTPS port
是否可以从 Lagom 连接到安全的 websocket 服务?那么使用 WebSocketClient 呢? 我有以下代码:
trait BinanceStreamingService extends Service {
def depthStream(symbol: String): ServiceCall[NotUsed, Source[DepthEvent, NotUsed]]
override final def descriptor = {
import Service._
import me.koopal.crypto.api.BinanceModelsMarshallers._
named("depth-stream")
.withCalls(
restCall(GET, "/ws/:symbol@deth", depthStream _)
)
}
}
private val binanceStreamApplication = new LagomClientApplication("binance-ws") with StaticServiceLocatorComponents with AhcWSComponents {
override def staticServiceUri = URI.create("wss://stream.binance.com:9443")
}
override def stream = ServiceCall { _ =>
binanceStreamClient.depthStream("bnbbtc")
.invoke()
.map { s =>
s.runForeach(e => println(e))
}.onComplete {
case Success(x) => println("success", x)
case Failure(ex) => println("failure", ex)
}
Future.successful("test")
}
可在此处找到运行代码示例:https://github.com/stijnkoopal/lagom-binance-websockets
Lagom 的WebSocket 客户端还不支持TLS。使用 Akka HTTP, which will enable TLS support: https://github.com/lagom/lagom/issues/895
重新实现客户端有一个悬而未决的问题同时,最好的方法是使用 Akka HTTP Client-Side WebSocket Support 或其他支持安全连接的 WebSocket 客户端库来实现您的客户端。