Кристаллическое волокно и сетчатое гнездо
Я новичок в кристалле. У меня есть вопрос, может кто-нибудь может мне помочь.
Я использую Kemal Framework. Иметь этот код:
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
Но результат отправляется в веб-сокет только один раз.
(Только после первого поста запроса)
Как я могу это исправить?
1 ответ
Я не эксперт по kemal, и я не знаю, каково ваше поведение, но если вы хотите отправлять websocket сообщение каждый раз, когда кто-то публикует в "/posts", я бы сделал цикл:
while data = channel.receive?
socket.send(data.to_h.to_json)
end