每当我尝试require("socket.io");
在 heroku 上使用时,它都会失败并显示消息“找不到模块 socket.io”。
我认为这是我的设置的问题,因为在我的本地 node.js 服务器中运行良好。
我必须改变什么?
雪松上的 Heroku 不支持 websockets
无论如何,您可以使用 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);
});
});
像魅力一样工作!!!
您必须更改您的 PaaS 提供商。Heroku 不支持 websocket。nodejitsu以支持websockets而闻名。
此外,您可能忘记添加socket.io
package.json 依赖项列表。
根据此项目 wiki 页面,您需要将 socket.IO 上的传输选项更改为持续时间为 (10) 秒的 xhr-polling 。
websocket 传输正在以 beta 状态在 Heroku 上工作。你可以启用它heroku labs:enable websockets -a YOUR_APP_NAME
这些是socket.io相关问题的解决方案
我希望我会工作
=============你的 index.js 文件 ======================
(这里的端口是 8000)
const express = require("express")
var app = express();
const http = require('http')
var server = http.createServer(app);
const port = process.env.PORT || 8000
server.listen(port,()=>
{
console.log("Listening at port => "+port)
});
var io = require('socket.io')(server, {
cors: {
origin: '*',
}
});
const cors = require("cors")
app.use(cors())
=============你的client.js文件======================
这里的端口是 8080
const socket = io.connect('https://localhost:8080/')
=============您的 index.html 文件 ======================
这里的端口是 8080
<script defer src="https://localhost:8080/socket.io/socket.io.js">
</script>
请记住您的“server.js 或 index.js”端口应该与“client.js”端口不同(记住这很重要)
(index.html 和你的 client.js) 端口必须相同
在使用 socket.io 时,您应该始终使用“http”(请参阅上面的代码)
你可能不包括 cors,因为它允许你拥有更多资源,没有 cors heroku 会阻止某些依赖项无法安装在 heroku 中(请参阅上面的代码)
尝试将“io”替换为“io.connect”
const socket = io.connect('https://localhost:8080/')
必须在 HTML 的末尾写标签
你可能会忘记在“socket.io”中添加这个必须的代码
它在您的 html 文件中是必需的
删除“node_modules”和“package-lock.json”并在cmd中写入“npm i”
这应该在 package.json 的脚本中
“开始”:“节点 index.js”,
我不是在谈论 nodemon ,在这里使用简单的节点
可能是版本造成了问题,你可以通过将所有“devDependencies”复制到“package.json”中的“dependencies”并将“*”放在这样的版本中来避免它
“依赖”:{
“cors”:“*”,
“表示”: ”*”,
"nodemon": "*",
“socket.io”:“*”
},
“devDependencies”:{}