node.js - Nodejs - Socketio 无法与 https 服务器一起使用,可能是什么原因?

标签 node.js sockets https socket.io

我尝试使用http服务器进行调试,并且socket.io工作,但是当我尝试使用https时,socket.io停止工作

// create server for http and https
//var httpserver = http.createServer(app).listen('3000', '127.0.0.1');
var https_server = https.createServer(options, app).listen('4000', '127.0.0.1');
// let the backend listens to this server
UserServer.listen(https_server);
//UserServer.listen(httpserver);


exports.listen = function(server){

    io = socketio.listen(server);
    io.sockets.on('connection', function(socket){
        console.log("Socket is connected, sweet ");
    });
} 

var httpserver = http.createServer(app).listen('3000', '127.0.0.1');
UserServer.listen(httpserver);

打印出来

Socket is connected, sweet "

var https_server = https.createServer(options, app).listen('4000', '127.0.0.1');
UserServer.listen(https_server);

没有输出

这是我的 https 设置

var express = require('express'),               
    https = require('https'),
        fs = require('fs'); 



var options = {
  key: fs.readFileSync('./key.pem', 'utf8'),
  cert: fs.readFileSync('./cert.pem', 'utf8')
};

我能够显示 https 页面,所以我猜测 https 设置不是问题

如有任何建议,我们将不胜感激,谢谢

最佳答案

首先,您需要运行Node.js Server with SSL .

Server.js

var fs = require('fs');    
var options = {
    key: fs.readFileSync('ssl/private/domain.com.key'),
    cert: fs.readFileSync('ssl/certs/domain.com.crt'),
    ca: fs.readFileSync('ssl/certs/domain.com.cabundle')
};
// You can do this easily if you are on windows 
// var options = { pfx: fs.readFileSync('/home/mydir/secure.pfx'); };
var app = require('https').createServer(options, handler),
    io = require('socket.io').listen(app);    

//Recommended Production settings
io.enable('browser client minification');  // send minified client
io.enable('browser client etag');          // apply etag caching logic based on version number
io.enable('browser client gzip');          // gzip the file
io.set('log level', 1);                    // reduce logging
io.set('flash policy port', 3300); //==>  override Flash Policy Port  
io.set('transports', [                     // enable all transports (optional if you want flashsocket)
    'websocket'
  , 'flashsocket'
  , 'htmlfile'
  , 'xhr-polling'
  , 'jsonp-polling'
]);
function handler(req, res) {
    res.writeHead(200);
    res.end("welcome sir!");
};    
io.sockets.on('connection', function (socket) {
    socket.on('message', function (data) {
        socket.broadcast.emit('message', data);
    });
});    
app.listen(3300);

Client.js

   //socketAddress is server uri  ex. https://www.domain.com:3300
   var socket = io.connect(socketAddress, {'flash policy port':3300} );
   socket.on('connect', function (data) {
      //.... 
   });
   socket.on('message', function (data) {
      //.... 
   });

关于node.js - Nodejs - Socketio 无法与 https 服务器一起使用,可能是什么原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22650322/

相关文章:

c - 我的程序挂起,不会爆发

php - Delphi 应用程序的 SSL 证书 - 是否需要启用安全性?

https - 更改 Fiddler 根证书以成功解密 HTTPS

javascript - socket.io - 向特定用户广播

java - 电话在3G上时套接字超时,在Wifi上时起作用,为什么?

node.js - Apollo 服务器与 graphql-shield 联合

sockets - 如何在 D 中创建 SSL 套接字?

android - 某些 androids 应用程序无法通过 fiddler 连接

node.js - 如何从 instagram node.js 获取其他用户媒体

node.js - 动态更改socket.io起源