簡體   English   中英

每個請求的ExpressJS / Node / Socket.io廣播消息

[英]ExpressJS/Node/Socket.io Broadcast Message on every request

我有一個nodejs應用程序,我想在其中監視生活在網頁上的每個傳入請求。 我正在嘗試使用socket.io。 我的app.js文件中包含以下內容

var express = require('express');
var http = require('http');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(3000);

var usageLogger = function(req, res, next) {
    console.log("GOT REQUEST !");
    var os = require("os"),
    cpus = os.cpus();

    var url = "URL: " + req.url + "\n" ;
    var urlTime = "Time: " + new Date().getTime() + "\n" ;

    var liveMessage = "<div><p><b>URL:</b> "+ req.url + "</p><p><b>Time: </b> " + new Date().getTime() + "</p></div>"

    io.on('connection', function(socket){
      socket.emit('news', liveMessage);
    });
}

app.use(usageLogger);

在我的footer.jade文件中,我具有以下內容:

.container
    .footer
        hr(style='margin: 30px 0 10px 0;')
        p &copy;&nbsp;
            a(href='#') Author
            |  2014

script(src='/javascripts/bootstrap.min.js')
script(src="/socket.io/socket.io.js")
script(type='text/javascript')
  |var socket = io();
  |socket.on('news', function(msg){
  |$('#messages').append(msg);
  |});


block footer

當我訪問任何頁面時,當我刷新站點的索引頁面時,我只會收到廣播消息。 因此,例如,當我第一次訪問localhost:300時,我可以看到以下內容:

網址:/時間:0909234234

但是,如果我打開一個新選項卡並訪問localhost:3000 / example,則必須刷新第一頁才能獲得以下視圖

網址:/時間:0909234234

網址:/ example時間:0909234239

我正在努力查看為什么在不刷新頁面的情況下無法自動更新的原因。 任何幫助我都非常感激。

在您的代碼中,對於每個即將到來的請求,當套接字連接時,您都會向該套接字發出news 您想要的是,當有請求進入時,向所有連接的套接字發出news 您可以通過以下方式進行操作:

var usageLogger = function(req, res, next) {
   //do what you want
   ...
   io.sockets.emit('news', liveMessage);
}

暫無
暫無

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

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