【发布时间】:2015-08-13 05:06:55
【问题描述】:
我有一个带有 express 4 的小型 http 服务器,在此之上我需要添加一个小型实时组件,为此我选择了 Socket.IO。我按照他们的指示到达了这个代码:
var https = require("https"),
fs = require("fs"),
express = require('express'),
app = express();
var options = {
key: fs.readFileSync('redacted.key'),
cert: fs.readFileSync('redacted.crt'),
ca: [
fs.readFileSync('g1.crt'),
fs.readFileSync('g2.crt'),
fs.readFileSync('g3.crt')
]
};
var server = https.createServer(options, app);
var io = require('socket.io')(server);
server.listen(30572);
io.listen(30572);
io.on('connection', function(socket) {
console.log('SocketIO connection received');
});
app.use(function(request, response, next) {
if (!request.secure) {
return response.redirect(['https://', request.get('Host'), request.url].join(''));
}
next();
});
app.use(express.static('.'));
console.log('Listening on 30572... Ctrl + C to quit');
还有这个客户端代码:
var socket = io.connect(location.origin)
从那时起,我就注意到此消息向控制台发送了垃圾邮件:
GET http://localhost:30572/socket.io/?EIO=3&transport=polling&t=1439410053456-0 404 (Not Found)
我已将 use 块注释掉,但无济于事。
是不是我做错了什么?
编辑:删除 SSL 没有任何区别。
【问题讨论】:
-
我认为您不需要行 io.listen(30572); 也不需要设置静态文件夹的行,我认为它不应该是 dot(. ) 可能会导致问题
-
express.static('.') 可以很好地服务于当前的工作目录树。会不会弄乱 SocketIO?编辑:将其换成 app.use(express.static(__dirname)); - 没有骰子。
-
但是服务 ('.') 存在安全风险,因为您可以访问 server.js 以及所有与节点相关的文件、插件等。我建议将您的静态文件放在一个文件夹中。第一行也不应该是 http 而不是 https 这里是 simple example
-
没想到。谢谢你告诉我。另外,请忽略这个问题。我使用的是 gulp 服务器而不是我自己的简单服务器,当然它不会工作。 ://
-
很高兴能帮上忙