По какой-то причине я не могу подключиться к socket.io с помощью cloud9.
узел app.js
var express = require('express')
, app = express()
, server = require('http').createServer(app)
, path = require('path')
, io = require('socket.io').listen(server);
app.configure(function(){
app.set('domain', process.env.IP);
app.set('port', process.env.PORT);
app.use(express.urlencoded());
app.use(express.json());
app.use(express.methodOverride());
app.use(express.compress());
app.use(express.responseTime());
// app.use(cors({credentials: false}));
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://run.plnkr.co");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Credentials", true);
next();
});
app.use(express.static(path.join(__dirname, '/html')));
});
app.use(function(err, req, res, next){
console.error(err.stack);
res.send(500, 'Something broke!');
});
// routes
app.use(app.router);
//sockets
io.sockets.on('connection', function(sock){
console.log('connected!', sock);
setInterval(function () {
sock.emit('send:time', {
time: (new Date()).toString()
});
}, 1000);
});
io.sockets.on('error', function(data) {
console.log('error', data, arguments);
});
// start app
app.listen(app.get('port'));
Клиентская сторона app.js (угловой)
var app = angular.module('plunker', []);
app.controller('MainCtrl', ['$scope', 'socket', function($scope, socket) {
socket.on('send:version', function (data) {
$log.log('send:version', data);
$scope.version = data.version;
});
socket.on('send:time', function (data) {
$log.log('send:time', data);
$scope.time = data.time;
});
}]);
app.factory('socket', [
'$rootScope'
, '$log'
, function (
$rootScope
, $log
) {
var socket = io.connect('https://demo-project-c9-chovy.c9.io');
$log.log('socket', io, socket);
socket.on('connect', function() {
$log.log('Connected!');
});
socket.on('error', function() {
$log.log('error!', arguments);
});
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
},
emit: function (eventName, data, callback) {
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
})
}
};
}]);
Я подозреваю, что проблема в том, что cloud9 использует прокси и не может обслуживать ресурс socket.io/1.
Вот как я подключаюсь из angular:
var socket = io.connect('https://demo-project-c9-chovy.c9.io');
Если я сделаю это, я получу 404.
Если я использую порт 8080, я в конечном итоге получаю событие ошибки сокета на стороне клиента.