精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

服務(wù)器推送事件:一種從服務(wù)器流式推送事件的簡易方法

開發(fā) 服務(wù)器
今天我要繼續(xù)著手實現(xiàn)服務(wù)器推送事件,因為昨天一整天我都沉浸在上述這些錯誤里。好在我學(xué)到了一個以前從未聽說過的易學(xué)易用的網(wǎng)絡(luò)技術(shù),心里還是很高興的。

哈嘍!昨天我見識到了一種我以前從沒見過的從服務(wù)器推送事件的炫酷方法:服務(wù)器推送事件server-sent events!如果你只需要讓服務(wù)器發(fā)送事件,相較于 Websockets,它們或許是一個更簡便的選擇。

我會聊一聊它們的用途、運作原理,以及我昨日在試著運行它們的過程中遇到的幾個錯誤。

問題:從服務(wù)器流式推送更新

現(xiàn)在,我有一個啟動虛擬機的 Web 服務(wù),客戶端輪詢服務(wù)器,直到虛擬機啟動。但我并不想使用輪詢方式。

相反,我想讓服務(wù)器流式推送更新。我跟 Kamal 說我要用 Websockets 來實現(xiàn)它,而他建議使用服務(wù)器推送事件不失為一個更簡便的選擇!

我登時就愣住了——那什么玩意???聽起來像是些我從來沒見過的稀罕玩意兒。于是乎我就查了查。

服務(wù)器推送事件就是個 HTTP 請求協(xié)議

下文便是服務(wù)器推送事件的運作流程。我-很-高-興-地了解到它們就是個 HTTP 請求協(xié)議。

1.客戶端提出一個 GET 請求(舉個例子)https://yoursite.com/events 2.客戶端設(shè)置 Connection: keep-alive,這樣我們就能有一個長連接 3.服務(wù)器設(shè)置設(shè)置一個 Content-Type: text/event-stream 響應(yīng)頭 4.服務(wù)器開始推送事件,就比如下文這樣:

event: status
data: one

舉個例子,這里是當(dāng)我借助 curl 發(fā)送請求時,一些服務(wù)器推送事件的樣子:

$ curl -N 'http://localhost:3000/sessions/15/stream'
event: panda
data: one
event: panda
data: two
event: panda
data: three
event: elephant
data: four

服務(wù)器可以根據(jù)時間推移緩慢推送事件,并且客戶端也能夠在它們到來時讀取它們。你也可以將 JSON 或任何你想要的東西放在事件當(dāng)中,就比如 data: {'name': 'ahmed'}

線路協(xié)議真的很簡單(只需要設(shè)置 event: 和 data:,或者如果你愿意,可設(shè)置為 id: 和 retry:),所以你并不需要任何花里胡哨的服務(wù)器庫來實現(xiàn)服務(wù)器推送事件。

JavaScript 的代碼也超級簡單(僅使用 EventSource)

以下是用于流式服務(wù)器推送事件的瀏覽器 JavaScript 的代碼。(我從 服務(wù)器推送事件的 MND 頁面 得到的這個范例)

你可以訂閱所有事件,也可以為不同類型的事件使用不同的處理程序。這里我有一個只接受類型為 panda 的事件的處理程序(就像我們的服務(wù)器在上一節(jié)中推送的那樣)。

const evtSource = new EventSource("/sessions/15/stream", { withCredentials: true })
evtSource.addEventListener("panda", function(event) {
  console.log("status", event)
});

客戶端在中途不能推送更新

不同于 Websockets,服務(wù)器推送事件不允許大量的來回事件通訊。(這體現(xiàn)在它的字眼中 —— 服務(wù)器 推送所有事件)。初始的時候客戶端發(fā)出一個請求,然后服務(wù)器發(fā)出一連串響應(yīng)。

如果 HTTP 連接結(jié)束,它會自動重連

使用 EventSource 發(fā)出的 HTTP 請求和常規(guī) HTTP 請求有一個很大的區(qū)別,MDN 文檔中對此有所說明:

默認(rèn)情況下,如果客戶端和服務(wù)器之間的連接斷開,則連接會重啟。請使用 .close() 方法來終止連接。

很奇怪,一開始我真的被它嚇到了:我打開了一個連接,然后在服務(wù)器端將其關(guān)閉,然后兩秒過后客戶端向我的傳送終端發(fā)送了另一條請求!

我覺得這里可能是因為連接在完成之前意外斷開了,所以客戶端自動重新打開了它以防止類似情況再發(fā)生。

所以如果你不想讓客戶端繼續(xù)重試,你就得通過調(diào)用 .close() 直截了當(dāng)?shù)仃P(guān)閉連接。

這里還有些其它特性

你還能在服務(wù)器推送事件中設(shè)置 id: 和 retry: 字段。似乎,如果你在服務(wù)器推送事件上設(shè)置,那么當(dāng)重新連接時,客戶端將發(fā)送一個 Last-Event-ID 響應(yīng)頭,帶有它收到的最后一個 ID。酷!

我發(fā)現(xiàn) W3C 的服務(wù)器推送事件頁面 令人驚訝地容易理解。

在設(shè)置服務(wù)器推送事件的時候我遇到了兩個錯誤

我在 Rails 中使用服務(wù)器推送事件時遇到了幾個問題,我認(rèn)為這些問題挺有趣的。其中一個緣于 Nginx,另一個是由 Rails 引起的。

問題一:我不能在事件推送的過程中暫停

這個奇怪的錯誤是在我做以下操作時出現(xiàn)的:

def handler
    # SSE is Rails' built in server-sent events thing
    sse = SSE.new(response.stream, event: "status")
    sse.write('event')
    sleep 1
    sse.write('another event')
end

它會寫入第一個事件,但不能寫入第二個事件。我對此-非-常-困-惑,然后放開腦洞,試著理解 Ruby 中的 sleep 是如何運作的。但是 Cass 將我引領(lǐng)到一個與我有著相同困惑的 Stack Overflow 問答帖,而這里包含了讓我為之震驚的回答!

事實證明,問題出在我的 Rails 服務(wù)器位于 Nginx 之后,似乎 Nginx 默認(rèn)使用 HTTP/1.0 向上游服務(wù)器發(fā)起請求(為啥?都 2021 年了,還這么干?我相信這其中一定有合乎情理的解釋,也許是為了向下兼容之類的)。

所以客戶端(Nginx)會在服務(wù)器推送第一個事件之后直接關(guān)閉連接。我覺得如果在我推送第二個事件的過程中 沒有 暫停,它繼續(xù)正常工作,基本上就是服務(wù)器在連接關(guān)閉之前和客戶端在爭速度,爭著推送第二部分響應(yīng),如果我這邊推送速度足夠快,那么服務(wù)器就會贏得比賽。

我不確定為什么使用 HTTP/1.0 會使客戶端的連接關(guān)閉(可能是因為服務(wù)器在每個事件結(jié)尾寫入了兩個換行符?),但因為服務(wù)器推送事件是一個比較新的玩意兒,HTTP/1.0 (這種老舊協(xié)議)不支持它一點都會不意外。

設(shè)置 proxy_http_version 1.1 從而解決那個麻煩。好欸!

問題二:事件被緩沖

這個事情解決完,第二個麻煩接踵而至。不過這個問題實際上非常好解決,因為 Cass 已經(jīng)建議將 stackoverflow 里另一篇帖的回答 作為前一個問題的解決方案,雖然它并沒有是導(dǎo)致問題一出現(xiàn)的源頭,但它-確-實-解-釋-了問題二。

問題在這個示例代碼中:

def handler
    response.headers['Content-Type'] = 'text/event-stream'
    # Turn off buffering in nginx
    response.headers['X-Accel-Buffering'] = 'no'
    sse = SSE.new(response.stream, event: "status")
    10.times do
        sse.write('event')
        sleep 1
    end
end

我本來期望它每秒返回 1 個事件,持續(xù) 10 秒,但實際上它等了 10 秒才把 10 個事件一起返回。這不是我們想要的流式傳輸方式!

原來這是因為 Rack ETag 中間件想要計算 ETag(響應(yīng)的哈希值),為此它需要整個響應(yīng)為它服務(wù)。因此,我需要禁用 ETag 生成。

Stack Overflow 的回答建議完全禁用 Rack ETag 中間件,但我不想這樣做,于是我去看了 鏈接至 GitHub 上的議題

那個 GitHub 議題建議我可以針對僅流式傳輸終端應(yīng)用一個解決方法,即 Last-Modified 響應(yīng)頭,顯然,這么做可以繞過 ETag 中間件。

所以我設(shè)置為:

headers['Last-Modified'] = Time.now.httpdate

然后它起作用了!!!

我還通過設(shè)置響應(yīng)頭 X-Accel-Buffering: no 關(guān)閉了位于 Nginx 中的緩沖區(qū)。我并沒有百分百確定我要那樣做,但這么做似乎更安全。

Stack Overflow 很棒

起初,我全身心致力于從頭開始調(diào)試這兩個錯誤。Cass 為我指向了那兩個 Stack Overflow 帖子,一開始我對那些帖下提出的解決方案持懷疑態(tài)度(我想:“我沒有使用 HTTP/1.0 啊!ETag 響應(yīng)頭什么玩意,跟這一切有關(guān)系嗎??”)。

但結(jié)果證明,我確實無意中使用  HTTP/1.0,并且 Rack ETag 中間件確實給我?guī)砹藛栴}。

因此,也許這個故事告訴我,有時候計算機就是會以奇怪的方式相互作用,其它人在過去也遇到過計算機以完全相同的奇怪方式相互作用的問題,而 Stack Overflow 有時會提供關(guān)于為什么會發(fā)生這些情況的答案 : )

我認(rèn)為重要的是不要隨意從 Stack Overflow 中嘗試各種解決方案(當(dāng)然,在這種情況下不會有人建議這樣做!)。對于這兩個問題,我確實需要去仔細(xì)思考,了解發(fā)生了什么,還有為什么更改這些設(shè)置會起作用。

就是這樣!

今天我要繼續(xù)著手實現(xiàn)服務(wù)器推送事件,因為昨天一整天我都沉浸在上述這些錯誤里。好在我學(xué)到了一個以前從未聽說過的易學(xué)易用的網(wǎng)絡(luò)技術(shù),心里還是很高興的。

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2020-03-09 08:24:06

TengineWeb代理服務(wù)器

2011-04-22 10:36:09

Server Push推送技術(shù)

2009-12-07 10:25:52

服務(wù)器安全服務(wù)器事件查看器

2012-02-16 11:35:34

ibmdw

2011-12-08 13:04:06

JavaNIO

2013-12-24 13:59:03

2009-12-07 10:19:16

2018-06-07 10:29:34

SDN服務(wù)器負(fù)載均衡

2024-04-07 09:41:18

SignalR實時通信開發(fā)

2021-03-18 09:31:56

微軟Exchange攻擊

2020-03-20 10:00:12

服務(wù)器網(wǎng)絡(luò)攻擊黑客

2022-09-14 12:01:35

服務(wù)器入侵篡改,

2016-09-08 22:54:14

2013-12-23 09:38:11

2025-03-26 00:00:00

Spring服務(wù)器推送技術(shù)

2013-04-26 11:42:00

2010-03-02 17:43:05

APC服務(wù)器機房

2009-10-27 16:24:22

APC服務(wù)器機房解決方

2010-09-13 10:53:09

2012-02-22 14:26:17

服務(wù)器云計算
點贊
收藏

51CTO技術(shù)棧公眾號

97国产精东麻豆人妻电影| 日韩激情视频在线| 久久久一二三四| 精品人妻一区二区三区麻豆91 | 日韩精品福利网站| 欧美国产日韩在线播放| 超碰超碰在线| 91丨九色丨蝌蚪丨老版| 国产精品九九久久久久久久| 特一级黄色录像| silk一区二区三区精品视频| 色综合久久久久综合体| 亚洲日本无吗高清不卡| 丰满人妻av一区二区三区| 日韩精品午夜视频| 九九九久久久久久| 国产亚洲精品久久久优势| 国产成人精品日本亚洲11| 国产精品久久久久久久久久精爆| 婷婷亚洲综合| 亚洲欧美国产精品专区久久| 三大队在线观看| 123成人网| 岛国av一区二区在线在线观看| 一级日韩一区在线观看| 蜜桃视频在线观看网站| 成人综合婷婷国产精品久久免费| 国产精品偷伦免费视频观看的| 久久视频免费在线观看| 女同性一区二区三区人了人一 | 欧美三级电影网| 妞干网在线视频观看| 中文字幕在线播放网址| 中文字幕欧美日韩一区| 麻豆av一区二区三区| 精品人妻一区二区三区三区四区| 麻豆国产欧美一区二区三区| 国产成人avxxxxx在线看| 中日韩精品视频在线观看| 欧美另类专区| 色综合视频一区中文字幕| 亚洲欧美精品久久| 色综合五月天| 一级做a爰片久久毛片美女图片| 国产 中文 字幕 日韩 在线| 日本亚洲欧洲无免费码在线| 欧美日韩一区二区三区不卡| jizz欧美激情18| 亚洲成人av观看| 91精品福利在线| 欧美日韩亚洲一二三| 周于希免费高清在线观看| 福利一区视频在线观看| 欧美精品情趣视频| 高清欧美性猛交xxxx| 国精产品一区二区三区| 久久99国内| 亚洲色图国产精品| 永久免费毛片在线观看| 波多野结衣一区| 中文字幕精品av| 三级影片在线观看| 国产精品精品| 欧美巨猛xxxx猛交黑人97人| 九九久久免费视频| 亚洲免费大片| 日韩av观看网址| 日本精品入口免费视频| 免费观看在线色综合| 国产精品自产拍在线观| 国产伦理吴梦梦伦理| 国产精品原创巨作av| yellow视频在线观看一区二区| www.精品视频| jvid福利写真一区二区三区| 蜜桃视频在线观看成人| 激情小说 在线视频| 国产精品情趣视频| 日本免费黄色小视频| av3级在线| 色偷偷88欧美精品久久久| 亚洲 欧美 日韩系列| 麻豆久久一区| 国产偷国产偷亚洲清高网站| 亚洲精品国产精品国自| 一区二区三区四区电影| 97视频在线看| 欧美成人一区二区视频| 国产成人综合亚洲91猫咪| 精品国产乱码久久久久久丨区2区| 精品影院一区| 亚洲男同性视频| 99精品在线免费视频| 祥仔av免费一区二区三区四区| 亚洲第一级黄色片| 精品亚洲aⅴ无码一区二区三区| 一区二区三区在线| 日本韩国欧美精品大片卡二| 国产精品久久777777换脸| 成人网男人的天堂| 神马影院一区二区| 成年人视频免费在线播放| 欧日韩精品视频| 亚洲乱妇老熟女爽到高潮的片 | 国产午夜福利一区二区| 人人爽香蕉精品| 国产成人看片| 免费黄网站在线| 欧美午夜视频在线观看| 精产国品一区二区三区| 欧美日韩伦理| 91av视频在线| www.久久伊人| 国产精品盗摄一区二区三区| 国产精品-区区久久久狼| 精品伊人久久| 色综合影院在线| 国内精品福利视频| 成人白浆超碰人人人人| 中日韩在线视频| 99re66热这里只有精品4| 精品国产91亚洲一区二区三区婷婷| 夜夜春很很躁夜夜躁| 99热免费精品在线观看| 91免费在线观看网站| 免费大片黄在线| 欧美在线色视频| 国产成人aaaa| 欧美日韩免费不卡视频一区二区三区| 麻豆av免费看| 91视频精品| 国产激情综合五月久久| 免费观看黄色一级视频| 亚洲免费观看高清完整| 国产一二三区av| 无码人妻精品中文字幕| 97se亚洲| 欧美成人免费全部| 夜夜嗨aⅴ一区二区三区| 久久亚洲精品小早川怜子| 91精品国产91久久久久麻豆 主演| 激情不卡一区二区三区视频在线 | 青青草视频免费在线观看| 亚洲一区国产视频| 99久久999| 欧美日韩免费一区二区三区视频| 强迫凌虐淫辱の牝奴在线观看| 欧美另类女人| 国产成人女人毛片视频在线| av网址在线| 欧美一区二区二区| 澳门黄色一级片| 狠狠色丁香久久婷婷综合丁香| 中文字幕不卡每日更新1区2区| 色猫猫成人app| 久久久精品中文字幕| 国产女无套免费视频| 亚洲狼人国产精品| 亚洲日本久久久| 国产亚洲在线| 亚洲精品9999| 成人国产精品久久| 九九热这里只有精品免费看| 性猛交富婆╳xxx乱大交天津| 亚洲一区二区在线观看视频 | 视频国产精品| 性欧美xxxx交| 精品乱码一区二区三四区视频| 欧美最猛黑人xxxxx猛交| 国产日产精品一区二区三区的介绍| 国产一区二区91| 搞av.com| 欧美日韩精品在线一区| 成人天堂噜噜噜| 免费看电影在线| 亚洲热线99精品视频| 中文字幕在线视频第一页| 亚洲人成人一区二区在线观看| 性xxxxxxxxx| 午夜在线观看免费一区| 亚洲视频在线观看日本a| 国产精品视频一区二区三区综合 | 在线观看黄色av| 欧美午夜精品理论片a级按摩| 国产在视频线精品视频| 国产精品888| 中文字幕无码精品亚洲35| 欧美欧美黄在线二区| 91精品视频免费看| 欧美国产国产综合| 无码人妻aⅴ一区二区三区日本| 91视频亚洲| 97精品在线观看| 番号在线播放| 欧美v亚洲v综合ⅴ国产v| 亚洲 欧美 日韩 在线| 综合亚洲深深色噜噜狠狠网站| 美女搡bbb又爽又猛又黄www| 久久夜色精品| 黄色三级中文字幕| 欧美手机视频| 国产伦精品一区二区三毛| 成人在线视频免费看| 久久久久亚洲精品国产| wwwww在线观看免费视频| 欧美第一区第二区| 一区二区视频免费| 欧美性猛交xxxx乱大交极品| 久久97人妻无码一区二区三区| 久久久91精品国产一区二区精品 | 黑丝一区二区| 日本不卡久久| 国产丝袜一区| 亚洲专区国产精品| 国产精品久久久久久妇女| 91国产中文字幕| 91精品久久久久久粉嫩| 在线成人激情黄色| 日本人妻熟妇久久久久久| 4438x成人网最大色成网站| 无码人妻精品一区二区50| 亚洲一区二区免费视频| 91久久国产综合| 国产精品每日更新| 国产亚洲精品熟女国产成人| 成人激情文学综合网| 日本黄色www| 久久99深爱久久99精品| 天美星空大象mv在线观看视频| 国产精品综合色区在线观看| 国产一线二线三线女| 午夜精品视频| 日本一级黄视频| 91精品国产自产拍在线观看蜜| 天天人人精品| av在线不卡顿| 日本一区免费观看| 日韩精品免费一区二区三区竹菊| 成人av资源网| 国产精品巨作av| 国产精品美女xx| 国产精品乱战久久久| 国产高清精品一区二区| 亚洲国产视频二区| 高清国语自产拍免费一区二区三区| 91精品一区| 91在线免费看片| theporn国产在线精品| 国产伦精品一区二区三区在线 | 国产成年人在线观看| 欧美电影《睫毛膏》| 三上悠亚亚洲一区| 天涯成人国产亚洲精品一区av| 久久国产美女视频| 亚洲图片激情小说| 欧美特级一级片| 亚洲精品美国一| 手机在线免费看毛片| 亚洲免费观看高清| 国产亚洲欧美久久久久| 亚洲国产精品久久一线不卡| 日本熟妇成熟毛茸茸| 小说区图片区亚洲| 2019中文字幕在线免费观看| 韩日精品一区二区| 国产精品久久久久久婷婷天堂| 国产第一亚洲| 91黄色国产视频| 猫咪成人在线观看| 日韩一区二区不卡| 在线免费一级片| 91精品一区二区三区在线观看| 国产模特av私拍大尺度| 日韩精品专区在线| 国产91在线亚洲| 亚洲色图88| 奇米影视亚洲色图| 天堂久久一区二区三区| 成人免费视频网| 男人晚上看的视频| 国产精品久久久久久久久图文区 | 国产99在线|中文| 91另类视频| 成人欧美一区二区三区黑人免费| 欧美精品密入口播放| 亚洲日本无吗高清不卡| 亚洲国产网站| 国产又大又黄又粗又爽| 福利一区二区在线观看| 九色porny自拍视频| 综合网在线视频| 精品成人av一区二区在线播放| 欧美亚洲免费在线一区| 午夜久久久久久久久久| 国产一区二区成人| 国产精品探花在线| 国产精品免费观看在线| av成人资源网| 一本久道久久综合狠狠爱亚洲精品| 亚洲无毛电影| 男人添女人下面免费视频| 成人精品免费看| 国产一级淫片久久久片a级| 亚洲成人7777| 国产男男gay体育生白袜| 国产亚洲xxx| а√天堂8资源中文在线| 国产欧美日韩精品在线观看| 欧美激情网址| 国产玉足脚交久久欧美| 精品一区二区三区视频| 人妻少妇无码精品视频区| 亚洲一二三四在线| 国产精品久久久久久久免费看| 亚洲欧美一区二区三区情侣bbw| 亚洲一区在线免费| 青青草成人影院| 欧美丰满熟妇bbbbbb百度| 国产精品1024久久| 最近中文字幕免费视频| 亚洲线精品一区二区三区| 一级黄色小视频| 亚洲欧美中文字幕在线一区| heyzo一区| 超碰97在线人人| 亚洲情侣在线| 91 视频免费观看| 欧美韩日一区二区三区四区| 国产超碰人人爽人人做人人爱| 精品久久久久99| 香蕉成人app免费看片| 成人亲热视频网站| 99久久久久| 一区二区成人网| 国产亚洲精品免费| 久久久久久无码精品大片| 亚洲乱码国产乱码精品精天堂 | 欧美电影免费观看高清| 久草综合在线观看| 日本一区二区免费在线| 亚洲国产av一区二区三区| 亚洲欧美色婷婷| 3d性欧美动漫精品xxxx软件| 欧美亚洲精品日韩| 肉色丝袜一区二区| 亚洲AV无码成人精品区明星换面| 色天天综合久久久久综合片| 黄色在线网站| 国产成人精品电影| 精品国产不卡| 亚洲一区在线不卡| 中文字幕日韩精品一区| 国产一区二区在线播放视频| 久久网福利资源网站| 欧美中文高清| 久久久性生活视频| 99精品欧美一区| 在线观看日本网站| 在线日韩第一页| 精品视频在线观看免费观看| www.69av| 99re热这里只有精品视频| 精品人妻一区二区色欲产成人| 亚洲午夜精品视频| 亚洲成人高清| 国产精品久久久久久久久电影网| 成人福利视频网站| 人人妻人人爽人人澡人人精品 | 欧美zozo另类异族| 岛国在线视频网站| 国产精品久久三| 日本免费在线观看视频| 伊人亚洲福利一区二区三区| 日日夜夜一区| 国产精品videossex国产高清| 国产伦理精品| 亚洲天堂网在线观看| 国产欧美在线观看免费| 欧美一二三不卡| 久久亚洲综合色| 国产色在线视频| 欧美孕妇性xx| 2023国产精品久久久精品双| 美国黄色一级视频| 在线观看www91| 污视频网站在线免费| 欧美精品v日韩精品v国产精品| 美女久久久精品| 国产在线视频在线观看| 亚洲视频在线免费看| 久久丁香四色| 国产第一页视频| 亚洲一区二区视频在线| 国产精品久久久久一区二区国产| 亚洲a级在线观看| 久久婷婷av| 精品少妇一二三区| 中文字幕日韩高清| 激情av综合| www.污网站|