为啥我的 socket.io 视频聊天无法在 heroku 上运行?

Posted

技术标签:

【中文标题】为啥我的 socket.io 视频聊天无法在 heroku 上运行?【英文标题】:Why my socket.io video chat won't work on heroku?为什么我的 socket.io 视频聊天无法在 heroku 上运行? 【发布时间】:2022-01-21 00:54:46 【问题描述】:

我是 WS 和 Heroku 的新手……所以我有这个代码

//我猜这会设置客户端套接字

    import io from 'socket.io-client';
    
    const options = 
      "force new connection": true,
      reconnectionAttempts: "Infinity", 
      timeout : 10000, 
      transports : ["websocket"]
    
    
const socket = io('/', options)

export default socket;

对于服务器端

    const path = require('path');
    const express = require('express');
    const app = express();
    const server = require('http').createServer(app);
    const io = require('socket.io')(server);
    const version, validate = require('uuid');
    
    const ACTIONS = require('./src/socket/actions');
    const PORT = process.env.PORT || 3001;
///more code

当部署到 heroku 时,这会导致这个应用程序 https://lit-atoll-99067.herokuapp.com/ 和 chrome 控制台显示:

WebSocket 连接到 'wss://lit-atoll-99067.herokuapp.com/socket.io/?EIO=4&transport=websocket' 失败:在建立连接之前关闭 WebSocket。

所以我的想法用完了。但我想这一定是关于港口什么的……真的不知道。欢迎任何想法!

【问题讨论】:

【参考方案1】:

我认为您需要在客户端传递完整的 URL,但您仅传递了“/”示例:-

import io from 'socket.io-client';
    
const options = 
  "force new connection": true,
   reconnectionAttempts: "Infinity", 
   timeout : 10000, 
   transports : ["websocket"]

// here need to pass the full url
const socket = io('https://example.com/', options)

export default socket;

对于服务器端试试这个

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const  Server  = require("socket.io");
const io = new Server(server);

io.on('connection', (socket) => 
  console.log('a user connected');
);

server.listen(3000, () => 
  console.log('listening on *:3000');
);

【讨论】:

嗨!这对我不起作用。我仍然收到控制台警告,并且用户之间没有建立 ws 连接。 它是否在您的本地环境中工作 你好。是的,当我初始化像const socket = io('http://localhost:3001', options) 这样的客户端套接字时它确实有效; 而且它也可以通过初始化在heroku上运行,但只能在我的机器上运行,所以我可以打开其他浏览器并且会有ws连接,但由于它是本地主机......当我运行时它不起作用想和其他人交谈。

以上是关于为啥我的 socket.io 视频聊天无法在 heroku 上运行?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 React Native 将 Socket io 连接到 https

找不到Node.js /socket.io/socket.io.js express 4.0

socket.io 连接事件不起作用,为啥?

Laravel 中的 Socket.io 轮询 404

无法使 socket.io 在 HTTPS 上工作

无法接收另一个人的视频流,使用 socket.io 和 peer.js