我开发了一个Node.js应用程序,该应用程序使用socket.io实时将一些基于JSON数组的内容发送到10到100台客户端计算机。
它运行良好,我对Node.js的速度和可靠性感到震惊,我现在正准备将其转移到生产环境并希望利用https(我已经在NGINX上成功配置了它) (在我的网络上的Ubuntu 14.04服务器上运行)。
我遇到的问题是,当我使用URL的HTTPS(ssl)版本时,页面加载正常,但对于Web套接字,由于混合内容,我收到套接字错误。 (注意:我现在有NGINX设置服务器SSL和非SSL版本,但最终我希望它只提供SSL版本)
我已尝试(在CLIENT中)使用https作为套接字连接,如下所示:
var socket = io.connect('https://mycooldomaingoeshere.com:3000');
以下是我使用NON SSL测试成功使用的代码(server.js和test.html):
//FILE NAME: SERVER.JS
var app = require('express')();
var http = require('http').Server(app); // for node to serve clients
var io = require('socket.io')(http); // socket.io bidirectional from node.js to clients
// THE JSON DATA I WILL EMIT TO CONNECTED CLIENTS...
var myJSON = [{"array":[1,2,3],"boolean":true,"null":null,"number":123,"object":{"a":"b","c":"d","e":"f"},"string":"Hello World"}];
// THE HTML PAGE THAT I WILL SERVE TO CLIENTS CONNECTED ON PORT 3000...
app.get('/', function(req, res) {
res.sendFile(__dirname + '/test.html'); // note, all connecting clients get served this ONE page
});
// UPON SUCCESSFUL CONNECTION TO THE PORT (3000)...
io.sockets.on('connection', function(socket) {
console.log('connected the new client!');
setInterval(function(){
// EMIT OUT THE JSON ARRAY TO CLIENTS EVERY 3 SECONDS
socket.volatile.emit('passingJSON', myJSON); //emit to all clients
}, 3000);
});
// OK, LETS LISTEN FOR ANY CLIENTS TRYING TO CONNECT ON PORT 3000
http.listen(3000, function() { //listen to 3000
console.log('listening on *:3000...');
});
以下是客户服务的页面(test.html):
<html>
<head>
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
$(document).ready(function(){
var socket = io.connect('http://localhost:3000');
// HERES SOMETHING THE NODE.JS SERVER CAN 'CALL' OR INVOKE...
socket.on('passingJSON', function(data) {
console.log(data);
console.log(new Date().toLocaleString());
});
});
</script>
</head>
<body>
this is a test page that uses node.js and socket.io
</body>
</html>
我使用的节点和NPM包版本是:
我的问题是我需要添加到我的代码中,或者为socket.io做些什么,以便能够在父页面的HTTPS原点内/旁边工作?
答案 0 :(得分:0)
我建议只使用这样的客户端连接:
var socket = io.connect();
这应该做的是自动适应https
和http
。