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测试了同一教程,结果卡住了。似乎没有什么帮助。测试了相同的教程,但被卡住了。似乎没有什么帮助。