Javascript 如何在中触发消息事件后断开和连接socket.io

Javascript 如何在中触发消息事件后断开和连接socket.io,javascript,angular,socket.io,Javascript,Angular,Socket.io,在这里,我在socket服务器上工作,并将其连接到angular客户端。一切都进行得很顺利。我面临的问题是,每当我调用getRequest时,它都应该从我得到的消息中呈现get数据 getRequest() { this.sock.getData(); this.sock.socket.on('message', (data) => { this.getresponseData = data; }); this.sock.socket.on(

在这里,我在socket服务器上工作,并将其连接到angular客户端。一切都进行得很顺利。我面临的问题是,每当我调用getRequest时,它都应该从我得到的消息中呈现get数据

 getRequest() {
    this.sock.getData();
    this.sock.socket.on('message', (data) => {
      this.getresponseData = data;

    });
    this.sock.socket.on('disconnect',()=> {
      console.log('A user disconnected');
   });
  }
在此之后,当我调用另一个方法,如postRequest()时,post请求发出的消息将在get request()中触发消息事件

以下是我的发帖请求

 postRequest() {
    this.sock.postData(this.postData);
    this.sock.socket.on('message', (data) => {
      this.responseData = data;
    });
    this.sock.socket.on('disconnect',()=> {
      console.log('A user disconnected');
   });
  }
简言之,每当我调用postReuest时,从mesasge发出的数据也将发送到get请求中不应该发生的消息事件

在套接字服务器端,我使用的两个请求


socket.send(数据)

套接字继承每个方法,其中每个方法都为单次激发侦听器声明了一个

侦听器在第一次调用后被取消注册

getRequest(){
this.sock.getData();
this.sock.socket.once('message',(data)=>{
this.getresponseData=数据;
});
this.sock.socket.on('disconnect',()=>{
log(“断开连接的用户”);
});
}

套接字继承每个方法,其中每个方法都为单次快照侦听器声明了一个

侦听器在第一次调用后被取消注册

getRequest(){
this.sock.getData();
this.sock.socket.once('message',(data)=>{
this.getresponseData=数据;
});
this.sock.socket.on('disconnect',()=>{
log(“断开连接的用户”);
});
}
  • 您不想在这两种方法上都订阅消息

  • 如果您想根据不同的方法获得响应,您应该注册不同的密钥。就像“信息”。并根据来自服务器的密钥发送消息

    this.sock.socket.on('getmessage',(数据)=>{ this.responseData=数据; });

    this.sock.socket.on('postmessage',(data)=>{ this.responseData=数据; });

  • 另一种方法是在api响应中使用一些标识符

    this.sock.socket.on('消息',(数据)=>{ if(data.m.type=='get') this.responseData=数据; 其他的 this.responsePostData=数据; });

  • 另一种方法是使用socket.mit
  • 您不想在这两种方法上都订阅消息

  • 如果您想根据不同的方法获得响应,您应该注册不同的密钥。就像“信息”。并根据来自服务器的密钥发送消息

    this.sock.socket.on('getmessage',(数据)=>{ this.responseData=数据; });

    this.sock.socket.on('postmessage',(data)=>{ this.responseData=数据; });

  • 另一种方法是在api响应中使用一些标识符

    this.sock.socket.on('消息',(数据)=>{ if(data.m.type=='get') this.responseData=数据; 其他的 this.responsePostData=数据; });

  • 另一种方法是使用socket.mit

  • 你做错的是你明确地打电话

    this.sock.socket.on('message', (data) => {
          this.getresponseData = data;
    
        });
    
    每次都在上面这会多次连接一个客户机,这根本不需要

    此函数必须在应用程序的整个生命周期中使用,除非您正在调用
    socket.removeAllListeners('disconnect')显式


    如果您希望在执行http请求后获取数据流,请仅使用一次。你的选择是错误的。您可能需要在那里使用经典的http请求。

    您所做的错误是您正在显式调用

    this.sock.socket.on('message', (data) => {
          this.getresponseData = data;
    
        });
    
    每次都在上面这会多次连接一个客户机,这根本不需要

    此函数必须在应用程序的整个生命周期中使用,除非您正在调用
    socket.removeAllListeners('disconnect')显式

    如果您希望在执行http请求后获取数据流,请仅使用一次。你的选择是错误的。您可能需要在那里使用经典的http请求