2

クリスタ初心者です。質問があります。誰かが私を助けてくれるかもしれません。

Kemal フレームワークを使用しています。このコードを持っています:

require "kemal"
require "json"

channel = Channel(Card).new

post "/posts" do |env|
  json = JSON.parse(env.request.body as String)

  url = json["url"].to_s

  spawn do
    # Slow process
    page = Scraper.new(url)
    channel.send(page)
  end

  {"url" => url}.to_json
end

ws "/" do |socket|
  data = channel.receive
  socket.send data.to_h.to_json
end

Kemal.run

ただし、結果が Web ソケットに送信されるのは 1 回だけです。

(最初の投稿リクエスト後のみ)

どうすれば修正できますか?

4

1 に答える 1

2

私はケマルの専門家ではないので、あなたの意図する動作はわかりませんが、誰かが「/posts」に投稿するたびに websocket にメッセージを送信したい場合は、ループを作成します。

while data = channel.receive?
  socket.send(data.to_h.to_json)
end
于 2016-08-12T14:13:03.520 に答える