socket.io中io.on和socket.on之间的差异?

socket.io中io.on和socket.on之间的差异?,socket.io,Socket.io,我不清楚函数传递的“socket”参数是什么(在“enigma”部分)。然后使用参数“socket.on”。io.on和socket.on之间有什么区别 下面的代码稍微改编自Socket.io聊天应用程序示例 变量 var http = require('http'); var express = require('express'); var app = express(); var server = http.createServer(app) var io = require('socke

我不清楚函数传递的“socket”参数是什么(在“enigma”部分)。然后使用参数“socket.on”。io.on和socket.on之间有什么区别

下面的代码稍微改编自Socket.io聊天应用程序示例

变量

var http = require('http');
var express = require('express');
var app = express();
var server = http.createServer(app)
var io = require('socket.io').listen(server);
谜团

io.on('connection', function (socket) {
  console.log('user connected');
  socket.on('message', function(msg) {
    console.log('message: ' + msg);
    io.emit('message', msg);
  })
});
启动服务器

server.listen(3000, function() {
  console.log('server is running');
});
index.jade

body
  script(src="/socket.io/socket.io.js")

form(method='post', action="/")
  input(type='text', id='user', autocomplete='off')
  input(type='submit', onClick="myFunc()")

strong messages:
  p(id="messages")

script.
  var socket = io();

  socket.on('message', function(msg) {
    console.log('client: ' + msg);
  });

  function myFunc() {
    var text = document.getElementById('user');
    socket.emit('message', text.value);
    text.value = '';
  };

在您的代码示例中,
io
是一个连接到
http.server
实例的Socket.io服务器实例,用于侦听传入事件

connection
事件侦听器回调函数的
socket
参数是一个表示来自客户端的传入套接字连接的对象

它们都可以使用
on
方法侦听事件

如果您将代码示例重新想象成这样,它可能会帮助您直观地理解这两者是如何分开的:

var connectionEvent = function(socket) {
    console.log('user connected');
    socket.on('message', function(msg) {
        console.log('message: ' + msg);
        io.emit('message', msg);
    });
};

io.on('connection', connectionEvent);

每当新用户连接到io(与您的服务器一起设置)时,就会创建一个新套接字,该套接字使用
socket.on
方法监听您的用户客户端操作(例如消息),然后执行回调函数(例如,通过
io.emit(…)向所有其他连接的用户广播该消息)
。我认为io对象用于服务器监听全局事件(例如新用户连接)或用于从服务器向所有其他用户广播……而套接字对象则用于对用户特定事件作出反应……但我不能100%确定其中的所有差异。。。