CrystalとKemalを使用して非ブロッキングサーバーを作成しようとしました。これは、(a)UDPメッセージのストリームをリッスンし、(b)そのメッセージをws接続を開始したすべてのブラウザにWebSocketに送信します。Crystal/Kemalを使用してUDPパケットをリッスンする
はこれまでのところ、私が管理することができる最高は次のとおりです。
require "kemal"
require "socket"
server = UDPSocket.new
server.bind "localhost", 1234
puts "Started..."
ws "/" do |socket|
udp_working = true
while udp_working
message, client_addr = server.receive
socket.send message
end
socket.on_close do
puts "Goodbye..."
udp_working = false
end
end
は、すべてが少し洗練ようだこれ、と確かに、期待通りに動作しない理由は次のとおりで送ら
- すべてのUDPパケット開始されたCrystalサーバーとCrystalサーバーに接続する最初のWebブラウザーとの間のキャッシュがキャッシュされ、1つの大きなバックログで送信されます。 NDループは私がUDPパケットはむしろ継続的にポーリングするブロックサーバーよりも、受信された場合にのみ、コードを実行するために私を可能にするserver.on_messageタイプの処理を期待していたクリスタル・サーバ
を終了するまで継続します。 Crystal/Kemalを使ってこれを達成する別の方法がありますか?
ありがとうございます!