Добавление неблокирующего отложенного события в запрос в sinatra
Я играю с примером клиента чата, который демонстрирует потоки и события на стороне сервера в sinatra (см. https://gist.github.com/rkh/1476463). Обратите внимание, что это должно быть настроено для работы с современным jquery. В частности:
// writing
$(document).on("submit", "form", function(e) {
И я начал играть с мыслью о том, что если бы я хотел, чтобы трансляция произошла через некоторое время. Я могу сделать наивную вещь и изменить ответ с помощью сна:
post '/' do
sleep 20
settings.connections.each { |out| out << "data: #{params[:msg]}\n\n" }
204 # response without entity body
end
Но тогда 204 фактически не отправляется до тех пор, пока не закончится 20-секундный сон, что глупо. Кроме того, кажется, что это происходит после того, как поступило 5 отложенных сообщений. Тогда больше сообщений не будет получено, пока эти 5 не закончат свой сон.