eventSource簡單介紹
eventSource是用來解決web上服務(wù)器端向客戶端推送消息的問題的。不同于ajax輪詢的復(fù)雜和websocket的資源占用過大,eventSource(sse)是一個輕量級的,易使用的消息推送api
如何使用 客戶端代碼Document
代碼很簡單,實例化api,監(jiān)聽事件
服務(wù)端nodejs代碼服務(wù)端這幾種實現(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) }) }
使用起來沒什么問題,都可以正常運行,不過在多個客戶端訪問的時候,一個客戶端連上之后,其他客戶端就沒有推送了,不知道為甚么?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82832.html
摘要:簡介是的縮寫。通常情況下,是我們的瀏覽器向服務(wù)器發(fā)起請求后,服務(wù)器響應(yīng),然后關(guān)閉連接。為了能夠保持通信,以便在服務(wù)器有事件發(fā)生時主動通知瀏覽器,后來人們又發(fā)明了很多技術(shù),包括等。 SSE簡介 SSE是Server-Sent Events的縮寫。通常情況下,是我們的瀏覽器向服務(wù)器發(fā)起請求后,服務(wù)器響應(yīng),然后關(guān)閉連接。為了能夠保持通信,以便在服務(wù)器有事件發(fā)生時主動通知瀏覽器,后來人們又發(fā)明...
摘要:簡介是的縮寫。通常情況下,是我們的瀏覽器向服務(wù)器發(fā)起請求后,服務(wù)器響應(yīng),然后關(guān)閉連接。為了能夠保持通信,以便在服務(wù)器有事件發(fā)生時主動通知瀏覽器,后來人們又發(fā)明了很多技術(shù),包括等。 SSE簡介 SSE是Server-Sent Events的縮寫。通常情況下,是我們的瀏覽器向服務(wù)器發(fā)起請求后,服務(wù)器響應(yīng),然后關(guān)閉連接。為了能夠保持通信,以便在服務(wù)器有事件發(fā)生時主動通知瀏覽器,后來人們又發(fā)明...
摘要:不過永久幀的技術(shù)會導(dǎo)致主頁面的加載條始終處于狀態(tài),體驗很差。同時,規(guī)范允許服務(wù)端指定自定義事件,客戶端偵聽該事件即可。 服務(wù)端推 服務(wù)端推,指的是由服務(wù)器主動的向客戶端發(fā)送消息(響應(yīng))。在應(yīng)用層的HTTP協(xié)議實現(xiàn)中,請求-響應(yīng)是一個round trip,它的起點來自客戶端,因此在應(yīng)用層之上無法實現(xiàn)簡易的服務(wù)端推功能。當(dāng)前解決服務(wù)端推送的方案有這幾個: 客戶端長輪訓(xùn) websocket...
摘要:本文則試著和讀者一起對這個數(shù)據(jù)推送的需求進(jìn)行技術(shù)方案的探究。數(shù)據(jù)推送有兩種替代方案無更新方案和數(shù)據(jù)拉取方案。數(shù)據(jù)拉取和數(shù)據(jù)推送的功能目標(biāo)是一致的讓用戶看到最新的數(shù)據(jù)。但數(shù)據(jù)推送有一些優(yōu)勢,即更低的延遲。 前言 眾所周知,AJAX的出現(xiàn)是前端快速發(fā)展的一個標(biāo)志,同時也是前后端得以分離的重要基礎(chǔ)。作為一個C/S網(wǎng)絡(luò)的web系統(tǒng),網(wǎng)絡(luò)通信在發(fā)揮著舉足輕重的作用。大部分的場景下,我們是主動觸發(fā)...
閱讀 2242·2021-11-15 11:39
閱讀 997·2021-09-26 09:55
閱讀 944·2021-09-04 16:48
閱讀 2856·2021-08-12 13:23
閱讀 931·2021-07-30 15:30
閱讀 2465·2019-08-29 14:16
閱讀 899·2019-08-26 10:15
閱讀 535·2019-08-23 18:40