1

每当我尝试require("socket.io");在 heroku 上使用时,它都会失败并显示消息“找不到模块 socket.io”。

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

我必须改变什么?

4

6 回答 6

6

雪松上的 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

于 2012-05-29T18:26:34.560 回答
1

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);
    }); 
});

像魅力一样工作!!!

于 2012-04-16T16:41:03.120 回答
1

您必须更改您的 PaaS 提供商。Heroku 不支持 websocket。nodejitsu以支持websockets而闻名

此外,您可能忘记添加socket.iopackage.json 依赖项列表。

于 2012-04-14T20:24:01.167 回答
0

根据此项目 wiki 页面,您需要将 socket.IO 上的传输选项更改为持续时间为 (10) 秒的 xhr-polling 。

于 2012-04-15T06:47:46.697 回答
0

websocket 传输正在以 beta 状态在 Heroku 上工作。你可以启用它heroku labs:enable websockets -a YOUR_APP_NAME

于 2013-11-07T04:07:46.463 回答
0

这些是socket.io相关问题的解决方案

我希望我会工作

  1. 您的(index.js 或 server.js)和(index.html 和您的 client.js)端口中的端口必须不同。(参考下面的代码)

=============你的 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) 端口必须相同

  1. 在使用 socket.io 时,您应该始终使用“http”(请参阅​​上面的代码)

  2. 你可能不包括 cors,因为它允许你拥有更多资源,没有 cors heroku 会阻止某些依赖项无法安装在 heroku 中(请参阅上面的代码)

  3. 尝试将“io”替换为“io.connect”

    const socket = io.connect('https://localhost:8080/')

  4. 必须在 HTML 的末尾写标签

  5. 你可能会忘记在“socket.io”中添加这个必须的代码

它在您的 html 文件中是必需的

  1. 删除“node_modules”和“package-lock.json”并在cmd中写入“npm i”

  2. 这应该在 package.json 的脚本中

    “开始”:“节点 index.js”,

我不是在谈论 nodemon ,在这里使用简单的节点

  1. 可能是版本造成了问题,你可以通过将所有“devDependencies”复制到“package.json”中的“dependencies”并将“*”放在这样的版本中来避免它

    “依赖”:{

    “cors”:“*”,

    “表示”: ”*”,

    "nodemon": "*",

    “socket.io”:“*”

    },

    “devDependencies”:{}

于 2021-05-16T12:16:43.237 回答