2011-08-25 82 views
0

Javascript中是否有任何「globals」函數,它與本例中應用的PHP全局變量類似?JavaScript Globals和Socket.io

var app = require('http').createServer(handler), 
io = require('socket.io').listen(app), 
fs = require('fs'), 
querystring = require('querystring'); 

app.listen(8000); 

var content = ''; 

function handler(req, res) { 
    io.sockets.on('connection', function (socket) { 
     if(req.method == 'POST') { 
      var fullBody = ''; 

      req.on('data', function(chunk) { 
       fullBody += chunk.toString(); 
      }); 

      req.on('end', function() { 
       var decodedBody = querystring.parse(fullBody); 
       console.log(decodedBody); 

       socket.emit('user-aaa5c8bbffe4db9', fullBody); 
      }); 
     } 
    }); 

    fs.readFile(__dirname + '/index.html', 
    function(err, data) { 
     if(err) { 
      res.writeHead(500); 
      return res.end('Error loading index.html'); 
     } 

     res.writeHead(200); 
     res.end(data); 
    }); 
} 

我寫了一個PHP應用程序,但我想有過socket.io通知,但我不想重新編寫的Node.js(還)的應用程序,所以我建立一個節點服務器,PHP的會派POST,然後服務器將通過Socket.io發送通知。我用基本腳本測試了服務器,他們確實有效。我也試着移動「io.sockets.on(‘連接’,函數(插座){」 IF語句裏面:

req.on('end', function() { 
    var decodedBody = querystring.parse(fullBody); 
    console.log(decodedBody); 

    io.sockets.on('connection', function (socket) { 
     socket.emit('user-aaa5c8bbffe4db9', fullBody); 
    }); 
}); 

但是這並沒有產生「即時」的結果,通知會來在一個頁面刷新後,客戶端

客戶端是一個簡單的:

socket.on('user-<?php echo $_SESSION['user_display_id']; ?>', function (data) { 
    alert(data); 
    $('#events').html(data); 
}); 

任何幫助,將不勝感激

+0

快速的問題 - 你使用什麼網頁瀏覽和版本的Socket.IO?如果您使用的是Chrome,您可能會因[此錯誤](https://github.com/LearnBoost/socket.io/issues/429)而受到影響。 Socket.IO的調試輸出應該顯示更多信息。 –

回答

0

在node.js中有對象global

您可以爲其屬性指定一些值,並且它們在任何地方都可以訪問,但我認爲這不是最佳實踐。