2014-02-22 41 views
7

我已经为我的节点应用程序设置了aws micro实例。我也使用socket.io。此刻EC2与socket.io

GET http://localhost:3000/socket.io/1/?t=1393065240268 net::ERR_CONNECTION_REFUSED 

在控制台时,应建立socket连接:我收到以下错误。除此之外,节点应用程序工作。我怀疑GET不应该朝着localhost而是朝向服务器的地址。

需要注意的是在服务器端节点的日志,它提供socket.io

debug - served static content /socket.io.js 

这里是我的服务器的安全组图片:

Security Group

Socket.io设置:

env = process.env.NODE_ENV || 'development', 
packageJson = require('../package.json'), 
http = require('http'), 
express = require('express'), 
RedisStore = require('connect-redis')(express), 
SessionSockets = require('session.socket.io'), 
path = require('path'), 
settings = require('./settings'), 
expose = require('express-expose') 
//Configure server for io and session.socket.io 
tmpApp = express(), 
tmpServer = http.createServer(tmpApp), 
io = require('socket.io').listen(tmpServer), 
appCookieParser = express.cookieParser(settings.cookie.secret), 
appRedisStore = new RedisStore(), 
sessionIO = new SessionSockets(io, appRedisStore, appCookieParser) 

global.App = { 
    app: tmpApp, 
    server: tmpServer, 
    port: process.env.PORT || 3000, 
    sessionIO: sessionIO, 
    io: io, 
    start: function() { 
     var setUp = this.util('setUp'), 
      socketHandler = require('./socketHandler'), 
      self = this 

      setUp.initialize(function(err, waitingGames) { 
       if (err) { 
        console.log('error at initializing the application') 
        process.exit(0) 
       } 
       if (!self.started) { 
        self.started = true 
        self.server.listen(self.port) 

        socketHandler() 

        console.log("Running App Version " + App.version + " on port " + App.port + " in " + App.env + " mode") 
       } 
      }) 

    }, 
... 
} 

UPDATE

当我改变了我的口80我得到一个不同的错误:

XMLHttpRequest cannot load http://localhost/socket.io/1/?t=1393067003774. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://ec2-54-214-136-70.us-west-2.compute.amazonaws.com' is therefore not allowed access. 

回答

12

我发现这个问题。它在客户端。我连接到localhost。这是一个愚蠢的错误,但在开发过程中,您不会注意这些细节,socket.io应该连接到您为内容提供服务的根。

由于我使用EC2,每次重新启动后,我得到不同的DNS地址,我发送到页面,我正在初始化socket.io正确的req.headers.host(使用express-expose)。

+2

谢谢你,谢谢:))我也使用本地主机,当我改变它到我的网址,它的工作。 – Data

+0

将socket.io服务器地址设置为'/socket.io'应该更简单,它应引用我从中获取网站的服务器。不知道是否socket.io处理,但它绝对应该。 – Erandros

+0

请详细解释 – dangalg