2016-03-01 50 views
1

我有服务器上运行的以下nodejs代码(聊天引擎)。我想将其转换为安全的基于SSL/TLS的连接。我怎么做 ?NodeJs将'net'套接字转换为基于SSL/TLS的套接字?

在客户端(见下面的代码),每次我试图将其转换为SSL时,它给我一个错误“异源请求失败。”。我不知道为什么?

var cluster = require('cluster'); 
var net = require('net'); 
var fs = require('fs'); 
var config = require('./config.js'); 
var num_processes = 1;//require('os').cpus().length; 

if (cluster.isMaster) { 

    // This stores our workers. We need to keep them to be able to reference 
    // them based on source IP address. It's also useful for auto-restart, 
    // for example. 
    var workers = []; 

    // Helper function for spawning worker at index 'i'. 
    var spawn = function (i) { 
     workers[i] = cluster.fork(); 

     // Optional: Restart worker on exit 
     workers[i].on('exit', function (worker, code, signal) { 
      if (config.server.restart_instances_on_crash) { 
       spawn(i); 
       logging.log('debug', 'Node instances exited, respawning...'); 
      } 
     }); 
    }; 

    // Spawn workers. 
    for (var i = 0; i < num_processes; i++) { 
     spawn(i); 
    } 

    // Helper function for getting a worker index based on IP address. 

    var worker_index = function (ip, len) { 
     var s = ''; 
     for (var i = 0, _len = ip.length; i < _len; i++) { 
      if (ip[i] !== '.') { 
       s += ip[i]; 
      } 
     } 

     return Number(s) % len; 
    }; 

    /* wait 5 seconds to make sure all the instances are running and initialized */ 

    setTimeout(function() { 
     // Create the outside facing server listening on our port. 

     var options = { 
      pauseOnConnect: true 
     }; 
     var server = net.createServer(options, function (connection) { 
      // We received a connection and need to pass it to the appropriate 
      // worker. Get the worker for this connection's source IP and pass 
      // it the connection. 
      var str = connection.remoteAddress; 
      var ip = str.replace("::ffff:", ''); 
      var worker = workers[worker_index(ip, num_processes)]; 
      worker.send('sticky-session:connection', connection); 
     }).listen(config.server.listenport); 
     logging.log('debug', 'Server listening on ' + config.server.listenip + ':' + config.server.listenport + '...'); 

    }, 5000); 
    process.on('uncaughtException', function (error) { 
     logging.log('error', 'uncaughtException'); 
     logging.log('error',error.stack); 
     process.exit(1); 
    }); 

} else { 
    var express = require('express'); 
    var sio = require('socket.io'); 
    var sio_redis = require('socket.io-redis'); 

    var dateandtime = require('./includes/dateandtime.js'); 
    var stats = require('./includes/stats.js'); 
    var helper = require('./includes/helper.js'); 

    // Note we don't use a port here because the master listens on it for us. 
    var app = new express(); 

    // Don't expose our internal server to the outside. 
    var server = app.listen(0, 'localhost'), 
     io = sio(server); 
    io.set('origins', '*:*'); 

} 

在我的客户端我有以下基于代码socket.io JS模块Node.js的服务器端代码。 (所有这些在使用网络模块时都没有SSL连接就可以正常工作)

以下是使用socket.io函数连接到节点服务器的客户端JavaScript代码。

var root_url = 'http://'+window.location.hostname; 
var socket_io = 'http://example.com/js/chat/socket.io-1.3.5.js'; 
$(document).ready(function() { 
$.getScript(socket_io, function() { 
     socket = io.connect(root_url + ':8440'); 
... etc 

回答

0

只能提示您检查跨域请求的cors包,但更深层的问题可能并非所有内容都在SSL中运行。 (混合http & https)

+0

我可以创建一个ssl连接,需要'净'?就我而言,我需要https或tls,但都没有与上面相同的行为,或者他们呢? – mahen3d