2013-05-17 114 views
0

超时,这是我app.js的下面的代码:Socket.io保持在Heroku

var port = process.env.PORT || 3000; 

var app = require('express').createServer(); 
var io = require('socket.io').listen(app); 

app.listen(port); 

io.configure(function() { 
    io.set("transports", ["xhr-polling"]); 
    io.set("polling duration", 10); 
}); 

var spaces = {}; 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/view.html'); 
}); 

app.get('/img/rocket.svg', function (req, res) { 
    res.sendfile(__dirname + '/img/rocket.svg'); 
}); 

app.get('/:spaceid', function (req, res) { 
    res.sendfile(__dirname + '/control.html'); 
}); 

io.sockets.on('connection', function (socket) { 

    socket.on('serve', function(data) { 
    spaces[data.spaceId] = socket; 
    }); 

    socket.on('control', function (data) { 
    var spaceSocket = spaces[data.spaceId]; 
    if (spaceSocket) { 
     spaceSocket.emit('control', data); 
    } 
    }); 

}); 

这是我所得到的,当我做heroku logs

2013-05-17T18:18:06.873629+00:00 heroku[web.1]: Starting process with command `node app.js` 
2013-05-17T18:18:07+00:00 app[web.1]: Warning: express.createServer() is deprecated, express 
2013-05-17T18:18:08+00:00 app[web.1]: applications no longer inherit from http.Server, 
2013-05-17T18:18:08+00:00 app[web.1]: please use: 
2013-05-17T18:18:08+00:00 app[web.1]: 
2013-05-17T18:18:08+00:00 app[web.1]: var express = require("express"); 
2013-05-17T18:18:08+00:00 app[web.1]: var app = express(); 
2013-05-17T18:18:08+00:00 app[web.1]: 
2013-05-17T18:18:09+00:00 app[web.1]: Socket.IO's `listen()` method expects an `http.Server` instance 
2013-05-17T18:18:09+00:00 app[web.1]: as its first parameter. Are you migrating from Express 2.x to 3.x? 
2013-05-17T18:18:08.076300+00:00 heroku[web.1]: State changed from starting to up 
2013-05-17T18:18:09+00:00 app[web.1]: If so, check out the "Socket.IO compatibility" section at: 
2013-05-17T18:18:09+00:00 app[web.1]: https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x 
2013-05-17T18:18:09+00:00 app[web.1]: info: socket.io started 
2013-05-17T18:18:09.745293+00:00 heroku[router]: at=error code=H18 desc="Request Interrupted" method=GET path=/ host=myapp123.herokuapp.com fwd="80.47.193.237" dyno=web.1 connect=1ms service=0ms status=503 bytes=0 sock=client 
2013-05-17T18:18:11.428152+00:00 heroku[router]: at=error code=H18 desc="Request Interrupted" method=GET path=/ host=myapp123.herokuapp.com fwd="80.47.193.237" dyno=web.1 connect=1ms service=0ms status=503 bytes=0 sock=client 

我研究的是不能使用WebSocket并必须以不同的方式进行配置。我不确定我是否正确。任何人都可以在代码中发现任何错误?请记住我目前正在学习这些东西。

回答

0

您的问题正是错误状态。使用这个来代替:

var express = require('express'); 
var app = express(); 
var http = require('http') 
var server = http.createServer(app) 
var io = require('socket.io').listen(server); 
server.listen(80); 

与应用程序的问题是,socket.io正在寻找的http.Server一个实例,并快速改变了它的API版本3发布的时候。注意这些错误:

Warning: express.createServer() is deprecated, express 
applications no longer inherit from http.Server 

Socket.IO's `listen()` method expects an `http.Server` instance 
as its first parameter. Are you migrating from Express 2.x to 3.x? 

启动一个应用程序,你表现出本来返回http.Server实例的方式,但已经改变了。 Here是事物从快2改为3名单这里的直引号:

请记住,明确的返回值()不再是 http.Server实例。

该方法在this提交中已弃用。您也可能会发现this感兴趣。除此之外,websockets确实无法在Heroku上运行,所以你的设置是正确的。

+0

找到电脑有什么好运气? – orange

+0

已更新的答案。这实际上是不正确的 - 我懒得去看我自己的来源。 – hexacyanide