Akka HTTP WebSocket客户端等效于此node.js

Akka HTTP WebSocket客户端等效于此node.js,websocket,akka-http,Websocket,Akka Http,我有一些用户文档说明了如何将websocket与此节点片段一起使用: var socket = io(“HOST:PORT”); socket.on('request-server', function() { socket.emit('server-type', 'red') }); Akka HTTP中的等效客户端代码是什么 我从Akka文档中的示例中得出以下内容。这不是我想写的,因为 我想在发送任何事件之前,我需要连接并等待请求服务器事件&我不知道怎么做 我不知道如何将源中的文本消

我有一些用户文档说明了如何将websocket与此节点片段一起使用:

var socket = io(“HOST:PORT”);
socket.on('request-server', function() {
  socket.emit('server-type', 'red')
});
Akka HTTP中的等效客户端代码是什么

我从Akka文档中的示例中得出以下内容。这不是我想写的,因为

  • 我想在发送任何事件之前,我需要连接并等待
    请求服务器
    事件&我不知道怎么做
  • 我不知道如何将
    中的
    文本消息
    格式化为等同于“socket.emit”('server-type','red')
它只打印“已关闭”


Akka客户端与给定的socket.io代码等价吗?

发送消息“outgoing”后,您的连接立即关闭

在这里查看半封闭WebSocket

implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
import system.dispatcher

val incoming: Sink[Message, Future[Done]] = Sink.foreach[Message] {
  case message: TextMessage.Strict => println(message.text)
  case z => println(z)
}

val outgoing = Source(List(TextMessage("'server-type': 'red'")))

val webSocketFlow = Http().webSocketClientFlow(
  WebSocketRequest("ws://localhost:3000/socket.io"))

val (upgradeResponse, closed) =
outgoing
  .viaMat(webSocketFlow)(Keep.right)
  .toMat(incoming)(Keep.both)
  .run()

val connected = upgradeResponse.flatMap { upgrade =>
  if (upgrade.response.status == StatusCodes.SwitchingProtocols) {
    Future.successful(Done)
  } else {
    throw new RuntimeException(s"Connection failed: ${upgrade.response.status}")
  }
}

connected.onComplete(println)
closed.foreach(_ => println("closed"))