我是水晶初学者。 我有疑问,也许有人可以帮助我。
我使用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套接字一次。
(仅在第一次发布请求后)
我该如何解决?
答案 0 :(得分:2)
我不是一个专家,而且我不知道你的预期行为是什么,但如果你想在每次有人发帖时给websocket发送一条消息" /帖子",我会做一个循环:
while data = channel.receive?
socket.send(data.to_h.to_json)
end