Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js中进行一次握手后,Web套接字连接断开并做出反应_Javascript_Node.js_Express_Websocket_Server - Fatal编程技术网

Javascript 在node.js中进行一次握手后,Web套接字连接断开并做出反应

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

我正在尝试建立一个简单的聊天室,让多个用户可以发布消息。我已经设置了节点web套接字,它正在广播一条消息,但之后它会立即关闭连接

这包括前端的react和后端的node.js。 为了简单起见,我在一个json文件中存储和检索所有消息。 我正在使用ws:a node.js websocket库来设置套接字连接。 在客户端,我使用浏览器WebSocket实例并在同一端口上侦听

    // 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
:仍处于连接状态