【问题标题】:Javascript Globals and Socket.ioJavascript 全局变量和 Socket.io
【发布时间】:2011-08-25 06:00:16
【问题描述】:

Javascript 中是否有任何类似于 PHP 全局变量的“全局变量”函数适用于本示例?

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 重写应用程序(还)所以我设置了一个 Node 服务器,PHP 将向该服务器发送一个 POST 并然后服务器将通过 Socket.io 发送通知。我已经用基本脚本测试了服务器,它们确实有效。我还尝试在 IF 语句中移动“io.sockets.on('connection', function (socket) {”:

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);
});

任何帮助将不胜感激

【问题讨论】:

  • 快速提问——您使用的是什么网络浏览器和 Socket.IO 版本?如果您使用的是 Chrome,您可能会被 this bug 所困扰。 Socket.IO 的调试输出应该显示更多信息。

标签: javascript node.js socket.io


【解决方案1】:

回答你的第一个问题。不,JavaScript 中没有 global。定义函数的范围内的所有变量都将在该函数中可用。

http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/

【讨论】:

    【解决方案2】:

    在 node.js 中有 global 对象。

    您可以为其属性分配一些值,它们将在任何地方都可以访问,但我认为这不是最佳做法。

    【讨论】:

      猜你喜欢
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2022-01-01
      • 2017-05-23
      相关资源
      最近更新 更多