NodeJs转换' net' socket到SSL / TLS的套接字?

时间:2016-03-01 10:37:01

标签: javascript node.js sockets ssl

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

在客户端(见下面的代码),每当我尝试将其转换为SSL时,它都会给我一个错误,即#34; Cross origin request failed。"我不知道为什么?

NODE.JS服务器端代码

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模块。 (当仅使用网络模块时,所有这些工作正常,没有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 

1 个答案:

答案 0 :(得分:0)

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