WebSocket连接到'wss://******/socket.io/?EIO=4&transport=WebSocket&sid=T2Sf_4oNIisxKLwsAAAK'失败

nr7wwzry  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(306)

我正在与www.example.com建立WebSocket连接socket.io,当我登录时,我收到以下错误:

WebSocket connection to 'wss://******/socket.io/?EIO=4&transport=websocket&sid=T2Sf_4oNIisxKLwsAAAK' failed:websocket.js:54

但随后连接建立,虽然我不确定它是否正确完成。它没有给我带来任何问题,但这个错误总是在启动时首先出现,然后一切正常。但问题是,一旦我登录,一切似乎都工作得很好后,错误。只是这个错误在一开始就弹出,我想确保它在生产中不会引起任何问题。我真的很感激你能提供的任何帮助。提前感谢一堆!
这是我用express编写的服务器代码:

const http = require('http');
const server = http.createServer(app);

const { Server } = require('socket.io')
const io = new Server(server)

这是我的客户代码:

var socket = io.(Config.getHost());
       socket.emit('connection', {
           console.log('*******');
       });
   
       socket.on('disconnect', function() {
           console.log('*******');
       });
dkqlctbz

dkqlctbz1#

我不知道这是否有帮助,但我的控制台没有错误。在我自己的例子中,我的客户是一个有Angular 的项目。所以我在服务器上建立了如下连接。

const app = require('express')();
const httpServer = require('http').createServer(app);
const cors = require('cors');
const io = require('socket.io')(httpServer, {
  cors: {
    origin : 'http://localhost:4200',
    methods: ["GET", "POST"],  
  },
});

const { instrument } = require("@socket.io/admin-ui");
const passport = require('passport');
const bcrypt = require('bcrypt');
const bodyParser = require("body-parser");
const LocalStrategy = require('passport-local').Strategy;
const port = 3000;
const shapes = {}; // Store shapes on the server
const { Pool } = require('pg')
const dotenv = require('dotenv');
dotenv.config();
const session = require('express-session');
const pgSession = require('connect-pg-simple')(session);
app.use(require('express').json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors({
  origin : 'http://localhost:4200',
  methods: ["GET", "POST"],
}));

io.on('connection', (socket) => {
    const shapeTypes = ['Circle', 'Rect', 'Line', 'Arrow', 'Text'];

    shapeTypes.forEach((shapeType) => {
      socket.on(`create${shapeType}`, (shapeData) => {
        shapes[shapeData.id] = shapeData;
        io.emit(`create${shapeType}`, shapeData);
      });

      socket.on(`update${shapeType}`, (shapeData) => {
        shapes[shapeData.id] = shapeData;
        io.emit(`update${shapeType}`, shapeData);
      });
    });
      
    // Handle disconnection
    socket.on('disconnect', () => {
      console.log('A client disconnected');
    });

});

instrument(io, {
  auth: false,
  mode: "development",
});
httpServer.listen(port, () => console.log(`listening on port ${port}`));

and in my angular角,I did just simple简单connection连接.

import { io } from 'socket.io-client';
public io = io('http://localhost:3000'); // I initialized this in the constructor

我可以做io.emit和io.on

yv5phkfx

yv5phkfx2#

为了澄清这个问题,通过使用以下设置使用WebSocket协议在httpd.conf文件中配置代理来解决这个问题:

ProxyPass /socket.io ws://127.0.0.1:5001/socket.io connectiontimeout=3000 timeout=3000
ProxyPassReverse /socket.io ws://127.0.0.1:5001/socket.io

这使得服务器和应用程序之间能够成功通信。我希望这个解决方案可以帮助将来面临类似问题的其他人!

相关问题