私は Http4s を使用して、このバックエンド サービスと UI の間の通信に使用できる websocket サービスをマウントしています (バッチ ジョブのステータス更新と完了 % をパイプします)。
BlazeBuilder Websocket Exampleを使用してサービスをセットアップしています。
サービスは機能しますが、私がやろうとしているのは、クラス インスタンス内からソケット メッセージを発行することです。たとえば、ワーカーをインスタンス化し、ソケット接続の参照を渡し、その接続にデータを送信できるようにしたいと考えています。残念ながら、私はこれを機能させるのに非常に苦労しています! 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)