Javascript 如何解决Socket.io传输轮询错误

Javascript 如何解决Socket.io传输轮询错误,javascript,socket.io,client-server,Javascript,Socket.io,Client Server,我正在尝试制作一个实时聊天应用程序,但有点卡住了,这是我的服务器端文件 const express= require('express'); const socketio = require('socket.io'); const http = require('https'); const {addUser,removeUser,getUser,getUserInRoom} = require('./users.js'); const PORT = process.env.PORT ||

我正在尝试制作一个实时聊天应用程序,但有点卡住了,这是我的服务器端文件

const express= require('express');
const socketio = require('socket.io');
const http = require('https');

const {addUser,removeUser,getUser,getUserInRoom} = require('./users.js');

const PORT = process.env.PORT || 5000;

const router = require('./router');


const app= express();
const server = http.createServer(app);
const io= socketio(server);

io.on('connect',(socket)=>{
    socket.on('join',({name,room},callback)=>{
        const {error,user}=addUser({id:socket.id,name,room});

        if(error)
            return callback(error);

        socket.emit('message',{user: 'admin',text: `${user.name}, welcome to room ${user.room}`});
        
        socket.broadcast.to(user.room).emit('message',{user: 'admin', text :`${user.name}, has joined!`});

        socket.join(user.room);

        callback();

    });

    socket.on('sendMessage',(message,callback)=>{
         const user = getUser(socket.id);

         io.to(user.room).emit('message',{user: user.name, text : message});

         callback();
    });

    socket.on('disconnect',()=>{
        console.log('user left');
    })
});


app.use(router);


server.listen(process.env.PORT || 5000,()=>console.log(`Server has started on port ${PORT}`));
import React, {useState,useEffect} from 'react';
import queryString from 'query-string';
import io from 'socket.io-client';

import './Chat.css';
import InfoBar from '../InfoBar/InfoBar';
import Input from '../Input/Input';

var socket;

const Chat = ( {location} ) => {
    const [name,setName]=useState('');
    const [room,setRoom]=useState('');
    const [message,setMessage] = useState('');
    const [messages,setMessages] = useState([]);
    const ENDPOINT = 'localhost:5000';

    useEffect(()=>{
        const {name,room} = queryString.parse(location.search);

        socket = io(ENDPOINT);
        
        //console.log(location.search);
        //console.log(data);
        setName(name);
        setRoom(room);

        //console.log(socket)
        socket.emit('join',{name,room},()=>{
            
        });

        return ()=>{
            socket.emit('disconnect');

            socket.off();
        } 
    }, [ENDPOINT,location.search]);

    useEffect(()=>{
        socket.on('message',(message)=>{
            setMessages([...messages,message]);
        })
    },[messages]);

    //function for sending messages

    const sendMessage = (event)=>{
        event.preventDefault();
        if(message){
            socket.emit('sendMessage',message,()=> setMessage(''));
        }
    }

    console.log(message,messages);

    return (
        <div className="outerContainer">
            <div className="container">
                <InfoBar room={room}/>
                <Input message={message} setMessage={setMessage} sendMessage={sendMessage} />
            </div>
        </div>
    )
}
export default Chat;
这是我的客户端文件

const express= require('express');
const socketio = require('socket.io');
const http = require('https');

const {addUser,removeUser,getUser,getUserInRoom} = require('./users.js');

const PORT = process.env.PORT || 5000;

const router = require('./router');


const app= express();
const server = http.createServer(app);
const io= socketio(server);

io.on('connect',(socket)=>{
    socket.on('join',({name,room},callback)=>{
        const {error,user}=addUser({id:socket.id,name,room});

        if(error)
            return callback(error);

        socket.emit('message',{user: 'admin',text: `${user.name}, welcome to room ${user.room}`});
        
        socket.broadcast.to(user.room).emit('message',{user: 'admin', text :`${user.name}, has joined!`});

        socket.join(user.room);

        callback();

    });

    socket.on('sendMessage',(message,callback)=>{
         const user = getUser(socket.id);

         io.to(user.room).emit('message',{user: user.name, text : message});

         callback();
    });

    socket.on('disconnect',()=>{
        console.log('user left');
    })
});


app.use(router);


server.listen(process.env.PORT || 5000,()=>console.log(`Server has started on port ${PORT}`));
import React, {useState,useEffect} from 'react';
import queryString from 'query-string';
import io from 'socket.io-client';

import './Chat.css';
import InfoBar from '../InfoBar/InfoBar';
import Input from '../Input/Input';

var socket;

const Chat = ( {location} ) => {
    const [name,setName]=useState('');
    const [room,setRoom]=useState('');
    const [message,setMessage] = useState('');
    const [messages,setMessages] = useState([]);
    const ENDPOINT = 'localhost:5000';

    useEffect(()=>{
        const {name,room} = queryString.parse(location.search);

        socket = io(ENDPOINT);
        
        //console.log(location.search);
        //console.log(data);
        setName(name);
        setRoom(room);

        //console.log(socket)
        socket.emit('join',{name,room},()=>{
            
        });

        return ()=>{
            socket.emit('disconnect');

            socket.off();
        } 
    }, [ENDPOINT,location.search]);

    useEffect(()=>{
        socket.on('message',(message)=>{
            setMessages([...messages,message]);
        })
    },[messages]);

    //function for sending messages

    const sendMessage = (event)=>{
        event.preventDefault();
        if(message){
            socket.emit('sendMessage',message,()=> setMessage(''));
        }
    }

    console.log(message,messages);

    return (
        <div className="outerContainer">
            <div className="container">
                <InfoBar room={room}/>
                <Input message={message} setMessage={setMessage} sendMessage={sendMessage} />
            </div>
        </div>
    )
}
export default Chat;
import React,{useState,useffect}来自“React”;
从“查询字符串”导入查询字符串;
从“socket.io客户端”导入io;
导入“./Chat.css”;
从“../InfoBar/InfoBar”导入InfoBar;
从“../Input/Input”导入输入;
无功插座;
常量聊天=({location})=>{
const[name,setName]=useState(“”);
常数[房间,设置室]=使用状态(“”);
const[message,setMessage]=useState(“”);
const[messages,setMessages]=useState([]);
const ENDPOINT='localhost:5000';
useffect(()=>{
const{name,room}=queryString.parse(location.search);
套接字=io(端点);
//console.log(location.search);
//控制台日志(数据);
集合名(名称);
休息室;
//控制台日志(套接字)
emit('join',{name,room},()=>{
});
return()=>{
socket.emit('disconnect');
socket.off();
} 
},[ENDPOINT,location.search]);
useffect(()=>{
socket.on('消息',(消息)=>{
setMessages([…messages,message]);
})
},[信息];
//发送消息的功能
const sendMessage=(事件)=>{
event.preventDefault();
如果(信息){
emit('sendMessage',message,()=>setMessage('');
}
}
控制台日志(消息,消息);
返回(
)
}
导出默认聊天;
我还尝试过使用io.connect(),正如在其他文章中提到的,但这没有帮助,通常会出现此错误


轮询xhr.js:203 GEThttp://localhost:5000/socket.io/?EIO=4&transport=polling&t=NNv75lE net::ERR_EMPTY_RESPONSE

测试了同一教程,结果卡住了。似乎没有什么帮助。测试了相同的教程,但被卡住了。似乎没有什么帮助。