2014-11-20 66 views
0

我有一個nodejs應用程序,我想在其中監控網頁上每個傳入的請求。我正在嘗試使用socket.io來做到這一點。在我的app.js我具有以下文件每個請求上的ExpressJS/Node/Socket.io廣播消息

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 

當我訪問任何網頁,我只得到了廣播消息,當我刷新網站的索引頁面。因此,例如,當我第一次訪問本地主機:300,我可以看到以下內容:

網址:/ 時間:0909234234

不過,如果我打開一個新的標籤和訪問本地主機:3000 /例子,我要刷新的第一頁得到以下觀點

網址:/ 時間:0909234234

網址:/例如 時間:0909234239

我奮力看看爲什麼這不會自動更新而不必刷新頁面。任何幫助我非常感謝。

+1

你,當請求中發射的消息廣播嘗試向所有插座。 – 2014-11-20 18:38:27

+0

@MohammadRahchamani感謝您回覆我,我對節點和socket.io相當陌生。你能否提供一個你的意思的例子。 – kushaldsouza 2014-11-20 18:48:55

+0

@MohammadRahchamani感謝您的幫助。我想到了。如果你可以在下面發表你的回答,我會接受。再次感謝。 – kushaldsouza 2014-11-20 18:57:49

回答

1

在您的代碼中,對於每個即將發生的請求,當套接字連接時,您將發出news到該套接字。你想要的是,當一個請求進來時,將所有連接的套接字發出news。 你能做到這樣:

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