不会从客户端发出套接字IO-节点JS

时间:2018-11-13 08:07:23

标签: node.js sockets socket.io

我正在使用Socket IO,客户端和服务器之间的连接已成功建立。我面临两个问题:

1-在客户端和服务器之间建立初始连接时,服务器上的socket.client.id和客户端上的socket.id都是相同的,但是当我刷新客户端页面时,客户端的ID更改为另一个,但在服务器上仍然相同。与服务器或什至使用套接字与客户端通信时,如果没有相同的ID,是否会引起任何问题?或刷新客户端页面时服务器上的ID是否更改?

2-在初始连接建立时,套接字使用来自服务器的socket.emit()传递消息,并在客户端上作为socket.on()接收消息。但是当我尝试从客户端发出任何内容时,服务器上都不会收到它。

套接字连接

function Globals() {

  this.socketConnection = async function() {
    let p = new Promise(function(res, rej) {
      io.on("connection", function(socket) {
        if (socket.connected) {
          res(socket);
        } else {
          rej("Socket Connection Error !");
        }
      })
    })
    return await p;
  }
}

new Globals().socketConnection().then(function(soc) {
  console.log(soc.client.id);
  socket = soc;
  soc.emit("Hi");
  soc.on("Nady", function() {
    console.log("I am called");
  })
})

客户端连接

function Globals() {
  this.socketConnection = async function() {

    var socket = io('http://localhost:8080');

    let p = new Promise(function(res, rej) {
      socket.on('connect', function() {
        if (socket.connected) {
          console.log(socket.id);
          res(socket);
        }
      })
    })

    return await p;
  }
}

var socket;
new App().socketConnection().then(function(s) {
  socket = s;
});

function ScrapJobs() {

  var socket;
  new App().socketConnection().then(function(s) {
    socket = s;
  });
  var _this = this;

  this.attachListeners = function() {
    qs("#init-scrap").ev("click", _this.startScrapping);
  }

  this.startScrapping = function() {
    console.log("I am cliced");
    socket.on("Hi", function() {
      console.log("Hi Nadeem");
    })
    socket.emit("Nady");
  }

}

1 个答案:

答案 0 :(得分:1)

  

在客户端和服务器之间建立初始连接时,服务器上的socket.client.id和客户端上的socket.id都相同,但是当我刷新客户端页面时,客户端的ID更改为另一个,但在服务器上仍然相同。它有什么问题吗

在收到socket.id事件之后,在客户端套接字对象上设置客户端connect值,并在reconnect事件之后对其进行更新(例如修改)。

看来,socket.io基础结构将使它们在客户端和服务器上保持相同。如果客户端断开连接,然后重新连接,则客户端和服务器上都会有一个具有新ID的新连接。客户端断开连接后,您可能尝试挂接到服务器上的旧套接字对象(我们真的看不到足够的服务器代码来评估它)。

  

在初始连接建立时,套接字使用来自服务器的socket.emit()传递消息,并在客户端上作为socket.on()接收。但是当我尝试从客户端发出任何内容时,服务器上都不会收到它。

您必须向我们展示可复制的案例。如果正确编写代码,则不会发生这种情况。我猜您在正确的套接字上没有正确的消息侦听器,才能查看正在发送的消息。我向您保证,正确实施后,从客户端向服务器发送消息就可以正常工作。


关于您的代码的一般注释。您显示的两个代码块似乎都是将socket对象填充到范围更大(甚至是全局)的变量中。这可能是造成问题的部分原因,因为如果客户端出于任何原因重新连接,则该套接字对象可能会失效。加上将任何类型的套接字对象放入全局或模块级别的变量中,都使您的服务器仅能够服务一个客户端-这根本不是设计多客户端服务器的方式。

相关问题