eventSource簡(jiǎn)單介紹
eventSource是用來(lái)解決web上服務(wù)器端向客戶端推送消息的問(wèn)題的。不同于ajax輪詢的復(fù)雜和websocket的資源占用過(guò)大,eventSource(sse)是一個(gè)輕量級(jí)的,易使用的消息推送api
如何使用 客戶端代碼Document
代碼很簡(jiǎn)單,實(shí)例化api,監(jiān)聽事件
服務(wù)端nodejs代碼服務(wù)端這幾種實(shí)現(xiàn)使用其一就可以了
var http = require("http") var fs = require("fs") http.createServer(function (req, res) { var fileName = "." + req.url; if (fileName === "./stream") { res.writeHead(200, { "Content-Type":"text/event-stream", "Cache-Control":"no-cache", "Connection":"keep-alive" }); res.write("retry: 10000 "); res.write("event: connecttime "); res.write("data: " + (new Date()) + " "); res.write("data: " + (new Date()) + " "); interval = setInterval(function() { res.write("data: " + (new Date()) + " "); }, 1000); req.connection.addListener("close", function () { clearInterval(interval); }, false); } else { fs.readFile("./index.html", "utf8",function(err, html) { if (err) { console.log(err) return } res.end(html) }) } }).listen(9999);服務(wù)端expressjs代碼
var express = require("express") var fs = require("fs") var app = express() app.get("/stream", function(req, res) { console.log(111) res.writeHead(200, { "Content-Type":"text/event-stream", "Cache-Control":"no-cache", "Connection":"keep-alive" }); res.write("retry: 10000 "); res.write("event: connecttime "); res.write("data: " + (new Date()) + " "); res.write("data: " + (new Date()) + " "); interval = setInterval(function() { res.write("data: " + (new Date()) + " "); }, 1000); req.connection.addListener("close", function () { clearInterval(interval); }, false); }) app.use(function(req, res) { fs.readFile("./index.html", "utf8",function(err, html) { if (err) { console.log(err) return } res.send(html) }) }) app.listen(9999, function(err) { if (err) { console.log(err) return } console.log("listening on port 9999") })服務(wù)端koajs 1.x 代碼
var koa = require("koa") var fs = require("fs") var PassThrough = require("stream").PassThrough var app = koa() app.use(function *() { var url = this.req.url if (url === "/stream") { var stream = new PassThrough() setInterval(function() { stream.write("data: " + (new Date()) + " ") }, 1000); this.type = "text/event-stream" this.body = stream } else { var html = yield koaFs this.body = html } }) app.listen(9999, function(err) { if (err) { console.log(err) return } console.log("listening on port 9999") }) function koaFs(fn) { fs.readFile("./index.html", "utf8", function(err, html) { fn(err, html) }) }
使用起來(lái)沒(méi)什么問(wèn)題,都可以正常運(yùn)行,不過(guò)在多個(gè)客戶端訪問(wèn)的時(shí)候,一個(gè)客戶端連上之后,其他客戶端就沒(méi)有推送了,不知道為甚么?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/82832.html
摘要:簡(jiǎn)介是的縮寫。通常情況下,是我們的瀏覽器向服務(wù)器發(fā)起請(qǐng)求后,服務(wù)器響應(yīng),然后關(guān)閉連接。為了能夠保持通信,以便在服務(wù)器有事件發(fā)生時(shí)主動(dòng)通知瀏覽器,后來(lái)人們又發(fā)明了很多技術(shù),包括等。 SSE簡(jiǎn)介 SSE是Server-Sent Events的縮寫。通常情況下,是我們的瀏覽器向服務(wù)器發(fā)起請(qǐng)求后,服務(wù)器響應(yīng),然后關(guān)閉連接。為了能夠保持通信,以便在服務(wù)器有事件發(fā)生時(shí)主動(dòng)通知瀏覽器,后來(lái)人們又發(fā)明...
摘要:簡(jiǎn)介是的縮寫。通常情況下,是我們的瀏覽器向服務(wù)器發(fā)起請(qǐng)求后,服務(wù)器響應(yīng),然后關(guān)閉連接。為了能夠保持通信,以便在服務(wù)器有事件發(fā)生時(shí)主動(dòng)通知瀏覽器,后來(lái)人們又發(fā)明了很多技術(shù),包括等。 SSE簡(jiǎn)介 SSE是Server-Sent Events的縮寫。通常情況下,是我們的瀏覽器向服務(wù)器發(fā)起請(qǐng)求后,服務(wù)器響應(yīng),然后關(guān)閉連接。為了能夠保持通信,以便在服務(wù)器有事件發(fā)生時(shí)主動(dòng)通知瀏覽器,后來(lái)人們又發(fā)明...
摘要:不過(guò)永久幀的技術(shù)會(huì)導(dǎo)致主頁(yè)面的加載條始終處于狀態(tài),體驗(yàn)很差。同時(shí),規(guī)范允許服務(wù)端指定自定義事件,客戶端偵聽該事件即可。 服務(wù)端推 服務(wù)端推,指的是由服務(wù)器主動(dòng)的向客戶端發(fā)送消息(響應(yīng))。在應(yīng)用層的HTTP協(xié)議實(shí)現(xiàn)中,請(qǐng)求-響應(yīng)是一個(gè)round trip,它的起點(diǎn)來(lái)自客戶端,因此在應(yīng)用層之上無(wú)法實(shí)現(xiàn)簡(jiǎn)易的服務(wù)端推功能。當(dāng)前解決服務(wù)端推送的方案有這幾個(gè): 客戶端長(zhǎng)輪訓(xùn) websocket...
摘要:本文則試著和讀者一起對(duì)這個(gè)數(shù)據(jù)推送的需求進(jìn)行技術(shù)方案的探究。數(shù)據(jù)推送有兩種替代方案無(wú)更新方案和數(shù)據(jù)拉取方案。數(shù)據(jù)拉取和數(shù)據(jù)推送的功能目標(biāo)是一致的讓用戶看到最新的數(shù)據(jù)。但數(shù)據(jù)推送有一些優(yōu)勢(shì),即更低的延遲。 前言 眾所周知,AJAX的出現(xiàn)是前端快速發(fā)展的一個(gè)標(biāo)志,同時(shí)也是前后端得以分離的重要基礎(chǔ)。作為一個(gè)C/S網(wǎng)絡(luò)的web系統(tǒng),網(wǎng)絡(luò)通信在發(fā)揮著舉足輕重的作用。大部分的場(chǎng)景下,我們是主動(dòng)觸發(fā)...
閱讀 2227·2021-11-15 11:39
閱讀 983·2021-09-26 09:55
閱讀 925·2021-09-04 16:48
閱讀 2831·2021-08-12 13:23
閱讀 919·2021-07-30 15:30
閱讀 2456·2019-08-29 14:16
閱讀 886·2019-08-26 10:15
閱讀 526·2019-08-23 18:40