2016-08-12 8 views
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 

をしかし、結果は一度だけ、ウェブソケットに送信されます。

(最初の投稿後のみ)

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

答えて

2

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

while data = channel.receive? 
    socket.send(data.to_h.to_json) 
end 
+0

それ以外の場合は、ブロックが終了するとwebsocket接続が閉じていると想定します – asterite

関連する問題