【问题标题】:can't get socket.io to work on cloud9无法让 socket.io 在 cloud9 上工作
【发布时间】:2013-12-07 18:25:58
【问题描述】:

由于某种原因,我无法使用 cloud9 连接到 socket.io。

节点 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 资源。

这是我从角度连接的方式:

    var socket = io.connect('https://demo-project-c9-chovy.c9.io');

如果我这样做,我会得到 404。

如果我使用端口 8080,我最终会在客户端收到套接字错误事件。

【问题讨论】:

    标签: node.js socket.io cloud9-ide


    【解决方案1】:

    我在 node app.js 文件中需要 server.listen(port, cb) 而不是 app.listen(port)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 2018-03-27
      • 1970-01-01
      • 2014-01-02
      • 2018-04-13
      • 1970-01-01
      相关资源
      最近更新 更多