W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
有時候,想要在開始發(fā)送數(shù)據(jù)時依然生成一些響應體??紤]一個極端的例子,在客戶端關閉連接之前,一直發(fā)送數(shù)據(jù)??梢允褂昧鬏o助方法來避免自己創(chuàng)建包裝方法。
get '/' do
stream do |out|
out << "It's gonna be legen -\n"
sleep 0.5
out << " (wait for it) \n"
sleep 1
out << "- dary!\n"
end
end
可以使用 stream 方法實現(xiàn)流式 API,服務器發(fā)送事件以及用作 WebSocket 的基礎。該方法同樣也可用來提高速度,如果只有部分內容依賴緩慢的資源。
注意:流式行為,特別是并發(fā)請求的數(shù)據(jù),高度依賴用來提供應用的 web 服務器。有些服務器,比如 WEBRick,根本不支持流。如果服務器不支持流,當傳遞給流的塊結束執(zhí)行時,響應體將會被立即返回。流并不是包治百病的萬金油。
如果可選的參數(shù)設置為?keep_open
?, 不會自動對流對象調用 close 方法,而是允許在隨后的執(zhí)行流中手動關閉。這近對那些時間驅動的服務器 (Thin,Rainbows) 起作用,其他服務器依然會關閉流。
# long polling
set :server, :thin
connections = []
get '/subscribe' do
# register a client's interest in server events
stream(:keep_open) { |out| connections << out }
# purge dead connections
connections.reject!(&:closed?)
# acknowledge
"subscribed"
end
post '/message' do
connections.each do |out|
# notify client that a new message has arrived
out << params[:message] << "\n"
# indicate client to connect again
out.close
end
# acknowledge
"message received"
end
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: