我想使用 socket.io 和 node 作为我的“推送通知功能”的层,所以我同时运行 apache 和 node。
我的服务器(节点)上有以下代码
var app = require('http').createServer(handler)
, io = require('C:/path/to/file/socket.io').listen(app)
, fs = require('fs');
app.listen(8080);
function handler(req, res) {
console.log(req);
fs.readFile('C:/path/to/file/index.html',
function (err, data) {
if (err) {
console.log(err);
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
socket.on('my event', function (msg) {
console.log("DATA!!!");
});
});
然后页面由 apache 从 localhost 提供,没有 8080 端口
在客户端我有以下代码:
var socket = io.connect('http://localhost:8080');
当一个按钮被点击时:
socket.emit('my event', {data:"some data"});
我在节点控制台上什么也看不到……这是为什么呢?跨域问题?
更新: 它在 safari 5.1.5 甚至 IE 9 上都可以正常工作,但不能在 chrome(18.0.1025.151) 或 firefox (11.0) 上运行……我错过了什么?
这是节点日志:
info - socket.io started
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 4944162402088095824
debug - setting request GET /socket.io/1/websocket/4944162402088095824
debug - set heartbeat interval for client 4944162402088095824
debug - client authorized for
debug - websocket writing 1::
debug - setting request GET /socket.io/1/xhr-polling/4944162402088095824?t=13
33977095905
debug - setting poll timeout
debug - discarding transport
debug - cleared heartbeat interval for client 4944162402088095824