Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Node.js Socket.io回调函数参数混淆_Node.js_Websocket_Socket.io_Yeoman - Fatal编程技术网

Node.js Socket.io回调函数参数混淆

Node.js Socket.io回调函数参数混淆,node.js,websocket,socket.io,yeoman,Node.js,Websocket,Socket.io,Yeoman,我不确定我是否理解套接字的服务器端配置 var app = express(); var server = require('http').createServer(app); var socketio = require('socket.io')(server, { serveClient: config.env !== 'production', path: '/socket.io-client' }); 这里,代码根据api引用创建一个与http服务器“连接”的套接字服务

我不确定我是否理解套接字的服务器端配置

var app = express();
var server = require('http').createServer(app);
var socketio = require('socket.io')(server, {
    serveClient: config.env !== 'production',
    path: '/socket.io-client'
});
这里,代码根据api引用创建一个与http服务器“连接”的套接字服务器。什么是附件

 socketio.on('connection', function (socket) {
    socket.on('create', function(room) {
        console.log('joining a room');
        socket.join(room);
        console.log('socket joined room: ', room);
    });

   socket.address = socket.handshake.address !== null ?
        socket.handshake.address.address + ':' + socket.handshake.address.port :
        process.env.DOMAIN;

   socket.connectedAt = new Date();

  // Call onDisconnect.
  socket.on('disconnect', function () {
      onDisconnect(socket);
      console.info('[%s] DISCONNECTED', socket.address);
  });

   // Call onConnect.
   onConnect(socket);
   console.info('[%s] CONNECTED', socket.address);
  });
};
问题:“socket”变量是服务器的还是客户端的?如果是服务器的,那么socket.join(房间)为什么工作?(客户端已添加到文件室)如果它是客户端的,那么为什么它必须侦听“创建”事件。(客户端发出名为“创建”的事件以更改文件室。)

最后,我被下面代码中的三个“套接字”弄糊涂了

 socketio.on('connection', function (socket) {
    socket.on('create', function(room) {
       console.log('joining a room');
       socket.join(room);
       console.log('socket joined room: ', room);
    });
 });
这里,代码根据api引用创建一个与http服务器“连接”的套接字服务器。什么是附件

 socketio.on('connection', function (socket) {
    socket.on('create', function(room) {
        console.log('joining a room');
        socket.join(room);
        console.log('socket joined room: ', room);
    });

   socket.address = socket.handshake.address !== null ?
        socket.handshake.address.address + ':' + socket.handshake.address.port :
        process.env.DOMAIN;

   socket.connectedAt = new Date();

  // Call onDisconnect.
  socket.on('disconnect', function () {
      onDisconnect(socket);
      console.info('[%s] DISCONNECTED', socket.address);
  });

   // Call onConnect.
   onConnect(socket);
   console.info('[%s] CONNECTED', socket.address);
  });
};
webSocket连接(socket.io构建在其之上)都是通过首先建立HTTP连接从客户端启动的。因此,必须有一个可用于socket.io连接的HTTP服务器。这就是socket.io的初始化需要HTTP连接的原因。通常,该web服务器也充当普通web服务器,因此可以用于这两个目的。这简化了跨源问题,因为所有浏览器都允许所有客户端连接到提供其网页的同一源。如果您还没有其他web服务器,socket.io可以创建自己的服务器

问题:“socket”变量是服务器的还是客户端的

它是表示到特定客户端的连接的服务器端对象。Socket.io在客户端上有一个Socket对象,表示与服务器的客户端连接,在服务器上有一个Socket对象(对于每个单独的客户端连接),表示与特定客户端的连接

因此,如果要向特定客户机发送数据,请使用表示该客户机的
socket
对象,然后执行以下操作:

socket.emit(msg, data);
如果是服务器的,那么socket.join(房间)为什么工作

这是因为这个
socket
对象表示与特定客户机的连接。它是一个服务器端对象,但特定于特定的客户端(例如,每个客户端连接都有一个不同的对象)

最后,我被下面代码中的三个“套接字”弄糊涂了

socketio
表示整个socket.io模块,是执行全局命令的方式。在本例中,您正在执行一个全局命令来侦听任何新连接的客户端

当您获得
连接
事件时,该事件的参数是新创建的
套接字
对象(表示与特定客户端连接的服务器端对象)

socket.on('create',…)
是从客户端发送到服务器的
create
消息的侦听器。因此,这行代码表示监听从这个特定(新连接的)客户机发送的
create
消息,当消息到达时,调用回调并将消息中发送的数据(在本例中为房间名称)传递给它

socket.join(房间)
line使用与上述相同的
socket
,并将其连接到服务器上的特定房间

这里,代码根据api引用创建一个与http服务器“连接”的套接字服务器。什么是附件

 socketio.on('connection', function (socket) {
    socket.on('create', function(room) {
        console.log('joining a room');
        socket.join(room);
        console.log('socket joined room: ', room);
    });

   socket.address = socket.handshake.address !== null ?
        socket.handshake.address.address + ':' + socket.handshake.address.port :
        process.env.DOMAIN;

   socket.connectedAt = new Date();

  // Call onDisconnect.
  socket.on('disconnect', function () {
      onDisconnect(socket);
      console.info('[%s] DISCONNECTED', socket.address);
  });

   // Call onConnect.
   onConnect(socket);
   console.info('[%s] CONNECTED', socket.address);
  });
};
webSocket连接(socket.io构建在其之上)都是通过首先建立HTTP连接从客户端启动的。因此,必须有一个可用于socket.io连接的HTTP服务器。这就是socket.io的初始化需要HTTP连接的原因。通常,该web服务器也充当普通web服务器,因此可以用于这两个目的。这简化了跨源问题,因为所有浏览器都允许所有客户端连接到提供其网页的同一源。如果您还没有其他web服务器,socket.io可以创建自己的服务器

问题:“socket”变量是服务器的还是客户端的

它是表示到特定客户端的连接的服务器端对象。Socket.io在客户端上有一个Socket对象,表示与服务器的客户端连接,在服务器上有一个Socket对象(对于每个单独的客户端连接),表示与特定客户端的连接

因此,如果要向特定客户机发送数据,请使用表示该客户机的
socket
对象,然后执行以下操作:

socket.emit(msg, data);
如果是服务器的,那么socket.join(房间)为什么工作

这是因为这个
socket
对象表示与特定客户机的连接。它是一个服务器端对象,但特定于特定的客户端(例如,每个客户端连接都有一个不同的对象)

最后,我被下面代码中的三个“套接字”弄糊涂了

socketio
表示整个socket.io模块,是执行全局命令的方式。在本例中,您正在执行一个全局命令来侦听任何新连接的客户端

当您获得
连接
事件时,该事件的参数是新创建的
套接字
对象(表示与特定客户端连接的服务器端对象)

socket.on('create',…)
是从客户端发送到服务器的
create
消息的侦听器。因此,这行代码表示监听从这个特定(新连接的)客户机发送的
create
消息,当消息到达时,调用回调并将消息中发送的数据(在本例中为房间名称)传递给它


socket.join(房间)
line使用与上述相同的
套接字
,并将其连接到服务器上的特定房间。

非常感谢!你的解释太棒了!非常感谢你!你的解释太棒了!