我的app.js代码如下:
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
我研究过,不能使用WebSockets,必须配置它不同。我不确定我的理解是否正确。有人能发现代码中的错误吗?请记住我现在正在学习这些东西
您的问题正是错误所说明的。用这个代替:
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
的实例,并且Express在版本3发布时更改了其API。请注意以下错误:
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
的实例,但这已经改变了。这里列出了从快递2号到快递3号的变化。下面是原话:
请记住,express()的返回值不再是anhttp。服务器实例。
该方法在此提交中已弃用。您也可能会对这个提交感兴趣。除此之外,websockets确实不能在Heroku上工作,所以你的设置是正确的。