我正在使用 Http4s 安装一个 websocket 服务,我可以使用该服务在此后端服务和 UI 之间进行通信(批处理作业的管道状态更新和完成百分比)。
我正在使用BlazeBuilder Websocket 示例来设置服务。
该服务有效,但我想做的是从类实例中发出套接字消息。例如,我想实例化一个工作线程,传递套接字连接的引用,并能够将数据发送到该连接。不幸的是,我很难完成这项工作!它在 Python 和 JS 中要简单得多。
请参阅下面的代码,主要是我上面链接的示例代码。在我调用 Stream.emit(...) 的地方,我怎样才能传递对该“toClient”的引用并仍然向它发出?如果我将 toClient 实例传递给类实例,它似乎不起作用。
case GET -> Root / "ws" =>
val toClient: Stream[F, WebSocketFrame] = Stream.emit(Text("How can I do this from a class instance?"))
val fromClient: Sink[F, WebSocketFrame] = _.evalMap { (ws: WebSocketFrame) =>
ws match {
case Text(t, _) => F.delay(println(t))
case f => F.delay(println(s"Unknown type: $f"))
}
}
WebSocketBuilder[F].build(toClient, fromClient)