AngularJS: aplicación de chat con socket.io sobre https

Estoy ejecutando esta aplicación de chat de ejemplo https://github.com/btford/angular-socket-io-im que usa socket.io/angular/node para hacer un im cliente básico.

Sin embargo, me encuentro con problemas cuando trato de hacer que funcione a través de https.

No se detectan eventos de socket en el servidor, por lo que no se envían mensajes de chat a los clientes y los usuarios no pueden unirse a las salas. También recibo este error en el cliente en socket.io.js :

 Uncaught TypeError: Cannot call method 'onClose' of null 

He creado un servidor express https escucha en el puerto 8000 y modifiqué la definición de socket para:

  var socket = io.connect('https://localhost:8000',{secure: true, port:8000}); 

tanto en js/services.js como en /bower_components/angular-socket-io/socket.js

No estoy seguro de cómo solucionar este problema. ¡Gracias por adelantado!

Tengo una aplicación que hace exactamente lo mismo 🙂 usa socket io y usa: 8080, necesitará asegurarse de que su certificado de seguridad está registrando que https://localhost y https://localhost:8000 y se ha agregado a su llavero de lo contrario la página se cargará pero las conexiones de socket fallarán.

Solo se requirieron algunos cambios para que esté disponible a través de https, aunque se trata de una antigua aplicación Express 2.5 que debe considerar: https://github.com/guille/chat-example.git

 /** * Module dependencies. */ var fs = require('fs'); var options = { key:fs.readFileSync('key.pem'), cert:fs.readFileSync('cert.pem') }; var express = require('express'), routes = require('./routes'), socket = require('./routes/socket.js'); var app = module.exports = express.createServer(options); // Hook Socket.io into Express var io = require('socket.io').listen(app); // Configuration app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.set('view options', { layout: false }); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.static(__dirname + '/public')); app.use(app.router); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); // Routes app.get('/', routes.index); app.get('/partials/:name', routes.partials); // redirect all others to the index (HTML5 history) app.get('*', routes.index); // Socket.io Communication io.sockets.on('connection', socket); // Start server app.listen(8080, function(){ console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); });