簡體   English   中英

Node.JS上的服務器發送事件

[英]Server-Sent Events on Node.JS

我實際上正在嘗試創建一個將使用Server-Sent Events草案的Web應用程序。 根據我的知識,SSE每個連接使用一個線程,並且由於服務器將連續將數據泵送到客戶端,即使一秒鍾也沒有閑置,我無法將線程放回池中。

因此,我正在嘗試使用Node.JS(我還沒有使用到日期)來處理與服務器的連接。 我已經瀏覽了HTML5 Rocks對SSE的介紹,並且有一個代碼示例將SSE與Node.JS集成在一起。

但是,我很困惑Node.JS是否會同時處理數千個客戶端連接並比Apache服務器更有效地利用服務器 任何人都可以幫助我理解Node將如何在這里行動嗎?

對不起,如果我聽起來有點太模糊。 我准備盡可能多的澄清! 謝謝!

PHP:

do {
  sendMsg($startedAt , time());
  sleep(5);
} while(true);

VS

的node.js

setInterval(function() {
  constructSSE(res, id, (new Date()).toLocaleTimeString());
}, 5000);

睡眠阻止php線程5秒的區別。 在這5秒鍾內,服務器需要有專門的線程,什么都不做。 每個用戶一個線程。

對於node.js版本,setInterval不會阻塞該線程。 一個node.js線程可以處理所有用戶。

嘗試查看有關並發連接的了解node.js事件循環文章。 我建議創建一個使用WebSockets而不是服務器發送事件的Web應用程序,因為瀏覽器支持SSE的次數少於WebSockets。 還有很多基於WebSocket的node.js模塊,在GitHub上有源代碼,可以“啟發”你。

但是,我很困惑Node.JS是否會同時處理數千個客戶端連接並比Apache服務器更有效地利用服務器? 任何人都可以幫助我理解Node將如何在這里行動嗎?

我認為您應該閱讀了解事件循環並為Node.js編寫優秀代碼以更好地掌握事件循環。 在node.js中沒有任何阻塞可以節省大量的CPU周期。

TJ的電子書也可以幫助您掌握事件。 當某些事情發生時,將調用與該事件相關的回調。

嘗試使用express + connect-sse

var sse, express, app;

sse = require('connect-sse')();
express = require('express')

app = express()
app.get('/events', sse, function (req, res) {
  res.json("this is an event");
  res.json({here: "is", another: "event"});
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM