socket.io 问题。无法连接。前端说连接:假,后端不记录任何东西

Posted

技术标签:

【中文标题】socket.io 问题。无法连接。前端说连接:假,后端不记录任何东西【英文标题】:socket.io problems. Not able to connect. front end says connection: false and backend doesn't log anything 【发布时间】:2021-06-28 02:18:52 【问题描述】:

我是 socket.io 的新手,我无法让它连接到 react 应用程序。这是我在节点中的 app.js

const express = require('express');
const port = process.env.PORT || 4000;
const router = require('./routes/routes');
const cors = require('cors');
const app = express();
const bodyParser = require('body-parser');
const db = require('./db/db');

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

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

app.use('*', cors());
app.use(bodyParser.urlencoded( extended: true ));
app.use(bodyParser.json());
(router);

app.listen(port, () => 
  console.log('listening on port ' + port);
  db.sync(
    // force: true,
    logging: false,
  );
);

还有我的前端代码。

import React,  useState, useEffect, useRef  from 'react';
import  io  from 'socket.io-client';
import classes from './Chatroom.module.css';

const Chatroom = ( user, getAllMessages, setGetAllMessages ) => 
  const ENDPOINT = 'http://localhost:4000/getallmessages';
  var socket = io(ENDPOINT);

  const messagesEndRef = useRef(null);

  const scrollToBottom = () => 
    messagesEndRef.current?.scrollIntoView( behavior: 'smooth' );
  ;

  useEffect(() => 
    socket.on('connect', () => 
      socket.send('hello');
      console.log('connected.');
    );
    console.log(socket);
  , []);
 

每当我查看控制台时,它都会显示已连接:false,并且后端没有任何记录。

【问题讨论】:

【参考方案1】:

为了解决这个问题,我必须在我的 io 声明中添加选项,如下所示。

const server = require('http').createServer(app);
const options = 
  cors: true,
  origins: ['http://127.0.0.1:3000'],
;
const io = require('socket.io')(server, options);

127.0.0.1 在家里,在客户端,我的服务器在 3000 上,这就是它的来源。在客户端,你是对的,我必须删除“getallmessages”路由,所以现在如下。

onst ENDPOINT = 'http://localhost:4000/';
  var socket = io(ENDPOINT);

  const messagesEndRef = useRef(null);

  const scrollToBottom = () => 
    messagesEndRef.current?.scrollIntoView( behavior: 'smooth' );
  ;

  useEffect(() => 
    socket.on('connect', () => 
      socket.send('hello');
      console.log('connected.');
    );
    console.log(socket);
  , []);

【讨论】:

【参考方案2】:

socket.io 绑定到服务器对象,因此您应该监听服务器而不是应用程序。

app.listen 更改为server.listen 如果您不使用命名空间,则通过删除 getallmessages 来更改端点

【讨论】:

以上是关于socket.io 问题。无法连接。前端说连接:假,后端不记录任何东西的主要内容,如果未能解决你的问题,请参考以下文章

使用socket.io连接mongodb

Socket.IO 无法通过 https 连接

Socket.io 无法在 ReactJS 应用程序中连接

无法通过 Socket.io 快速建立连接

Socket.io 睡眠一些客户端

在 NestJS 中连接后,Socket.io 客户端正在断开连接