Javascript 是否可以让来自NGINX(端口443)的SSL页面也在端口3000上使用socket.io(通过Node.js)

Javascript 是否可以让来自NGINX(端口443)的SSL页面也在端口3000上使用socket.io(通过Node.js),javascript,node.js,ssl,nginx,socket.io,Javascript,Node.js,Ssl,Nginx,Socket.io,Im开发了一个Node.js应用程序,它使用socket.io实时将一些基于JSON数组的内容发送到10到100台客户机的任意位置 它工作得很好,Node.js的速度和可靠性让我大吃一惊,我现在正准备将其投入生产,并希望使用https(我已经在NGINX上成功配置了https(在我的网络上的Ubuntu 14.04服务器上运行) 我遇到的问题是,当我使用HTTPS(ssl)版本的URL时,页面加载很好,但对于web套接字,由于内容混合,我得到了一个套接字错误。(注意:我现在有NGINX设置来同时

Im开发了一个Node.js应用程序,它使用socket.io实时将一些基于JSON数组的内容发送到10到100台客户机的任意位置

它工作得很好,Node.js的速度和可靠性让我大吃一惊,我现在正准备将其投入生产,并希望使用https(我已经在NGINX上成功配置了https(在我的网络上的Ubuntu 14.04服务器上运行)

我遇到的问题是,当我使用HTTPS(ssl)版本的URL时,页面加载很好,但对于web套接字,由于内容混合,我得到了一个套接字错误。(注意:我现在有NGINX设置来同时为ssl和非ssl版本提供服务,但最终我希望它只为ssl版本提供服务)

我尝试(在客户端)使用https进行套接字连接,如下所示:

var socket = io.connect('https://mycooldomaingoeshere.com:3000');
以下是我在非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):


$(文档).ready(函数(){
var socket=io.connect('http://localhost:3000');
//下面是NODE.JS服务器可以“调用”或调用的内容。。。
socket.on('passingJSON',函数(数据){
控制台日志(数据);
log(newdate().toLocaleString());
});
});
这是一个使用node.js和socket.io的测试页面
我使用的节点和NPM包版本是:

  • socket.io v1.4.5
  • express v4.13.4
  • npm v3.9.5
  • node.jsv6.2.2

我的问题是,为了使socket.io能够在父页面的HTTPS源中/与之一起工作,我需要向代码中添加什么,或者采取什么不同的方法?

我建议只使用如下客户端连接:

var socket = io.connect();

这应该做的是自动适应
https
http

我试过了,它确实会自动检测协议(https或http),但在Chrome Developer tools中检查网络调用时,它会为socket.io抛出404错误。您是否也可以发布您在Chrome Developer tools上遇到的错误以及您的问题?
var socket = io.connect();