Javascript 在node.js中进行一次握手后,Web套接字连接断开并做出反应
我正在尝试建立一个简单的聊天室,让多个用户可以发布消息。我已经设置了节点web套接字,它正在广播一条消息,但之后它会立即关闭连接 这包括前端的react和后端的node.js。 为了简单起见,我在一个json文件中存储和检索所有消息。 我正在使用ws:a node.js websocket库来设置套接字连接。 在客户端,我使用浏览器WebSocket实例并在同一端口上侦听Javascript 在node.js中进行一次握手后,Web套接字连接断开并做出反应,javascript,node.js,express,websocket,server,Javascript,Node.js,Express,Websocket,Server,我正在尝试建立一个简单的聊天室,让多个用户可以发布消息。我已经设置了节点web套接字,它正在广播一条消息,但之后它会立即关闭连接 这包括前端的react和后端的node.js。 为了简单起见,我在一个json文件中存储和检索所有消息。 我正在使用ws:a node.js websocket库来设置套接字连接。 在客户端,我使用浏览器WebSocket实例并在同一端口上侦听 // In server.js (Backend) const server = http.createSe
// In server.js (Backend)
const server = http.createServer(doOnRequest)
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 1994 })
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(data) {
wss.clients.forEach(function each(client) {
if (client !== ws && client.readyState === WebSocket.OPEN){
client.send(data);
}
});
});
ws.on('close', () => {
console.log('server conn closed');
setTimeout(() => {
console.log('closed by server console. log');
}, 2000);
})
});
function doOnRequest(request, response) {
// This functions handles all the get and post calls and stores
it in a file
}
const server = http.createServer(doOnRequest)
server.listen(3001);
// IN Chatroom.js ( UI )
const URL = 'ws://localhost:1994'
class Chatroom extends React.Component {
ws = new WebSocket(URL)
constructor(props) {
////// binding classes declaring state ////
}
componentDidMount() {
this.ws.onopen = () => {
console.log('connected')
}
this.ws.onmessage = evt => {
// on receiving a message, add it to the list of messages
let x = this.state.messageList;
x ? x.push(JSON.parse(evt.data)) : [JSON.parse(evt.data)];
this.setState({
messageList: x,
value: ''
});
}
this.ws.onclose = () => {
console.log('disconnected')
}
this.renderOlderMessages();
}
renderOlderMessages() {
// render older messages using GET request
}
addNewMessage(chatObj) {
// let res = a Post request (with Request body as chatObj).
res.then(() => {
this.ws.send(JSON.stringify(chatObj))
let x = this.state.messageList;
x ? x.push(chatObj) : [chatObj];
this.setState({
messageList: x,
value: ''
});
});
}
render() {
return (
<div>
/// render old messages ///
</div>
<div>
<form>
Input ---> New message ---> Submit
</form>
</div>
)
}
}
//在server.js(后端)中
const server=http.createServer(doOnRequest)
常量WebSocket=require('ws')
const wss=new WebSocket.Server({port:1994})
wss.on('connection',function connection(ws){
ws.on('message',函数传入(数据){
forEach(每个函数(客户端){
if(client!==ws&&client.readyState===WebSocket.OPEN){
发送(数据);
}
});
});
ws.on('close',()=>{
log('server conn closed');
设置超时(()=>{
console.log('由服务器console.log关闭');
}, 2000);
})
});
函数doOnRequest(请求、响应){
//此函数处理所有get和post调用以及存储
它在一个文件中
}
const server=http.createServer(doOnRequest)
监听服务器(3001);
//在Chatroom.js(UI)中
const URL='ws://localhost:1994'
类聊天室扩展React.Component{
ws=新WebSocket(URL)
建造师(道具){
//////声明状态的绑定类//
}
componentDidMount(){
this.ws.onopen=()=>{
console.log('已连接')
}
this.ws.onmessage=evt=>{
//收到消息后,将其添加到消息列表中
设x=this.state.messageList;
x?x.push(JSON.parse(evt.data)):[JSON.parse(evt.data)];
这是我的国家({
消息列表:x,
值:“”
});
}
this.ws.onclose=()=>{
console.log('断开连接')
}
this.renderOlderMessages();
}
renderodermessages(){
//使用GET请求呈现旧消息
}
addNewMessage(chatObj){
//让res=一个Post请求(请求主体为chatObj)。
res.then(()=>{
this.ws.send(JSON.stringify(chatObj))
设x=this.state.messageList;
x?x.push(chatObj):[chatObj];
这是我的国家({
消息列表:x,
值:“”
});
});
}
render(){
返回(
///呈现旧消息///
输入--->新消息--->提交
)
}
}
Hi mate,您能在检测到关闭的连接时提供响应/错误吗?它会立即进入“onclose”事件,然后控制台会“disconnected”。之后,如果尝试发送另一条消息,则会抛出此错误---->WebSocket连接到“ws://localhost:1994/”失败:连接建立错误:net::ERR_connection_拒绝,或者有时弹出的另一个错误是-->未能在Websocket
上执行send
:仍处于连接状态