【发布时间】: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