socket.io不能在heroku上工作

每当我尝试使用require("socket.io"); 在heroku它失败,并显示消息“无法find模块socket.io”。

我认为这是我的设置问题,因为在我的本地node.js服务器中运行良好。

我需要改变什么?

您必须更改PaaS提供商。 Heroku不支持websocket。 作为nodejitsu被称为支持websockets。

另外,你可能忘记了在package.json依赖列表中添加socket.io

雪松上的Heroku不支持websocket

无论如何,你可以使用socket.io

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

https://devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku

package.json修改为

 "dependencies": { "async": "0.1.18", "ejs": "0.4.3", "express": "2.4.6", "faceplate": "0.0.4", "socket.io": "latest" }, 

而服务器端的代码是:

 var port=process.env.PORT || 3000; var http=require('http'); var app=http.createServer(function(req,res){ res.write("server listening to port:"+port); res.end(); }).listen(port); socket=require("socket.io"); io=socket.listen(app); io.configure(function () { io.set("transports", ["xhr-polling"]); io.set("polling duration", 10); }); io.sockets.on("connection",function(socket){ console.log("new connection"); socket.on("eventA",function(data){ io.sockets.emit("eventB",data); }); }); 

像魅力一样工作!

根据这个项目的wiki页面 ,你需要将socket.IO上的传输选项更改为xhr-polling(10)秒。

websocket运输工作在testing状态的Heroku。 您可以使用heroku labs:enable websockets -a YOUR_APP_NAME启用它heroku labs:enable websockets -a YOUR_APP_NAME