【问题标题】:Difference between io.on and socket.on in Socket.io?Socket.io 中 io.on 和 socket.on 的区别?
【发布时间】:2016-02-15 16:08:12
【问题描述】:

我对随函数传递的“socket”参数是什么感到困惑(在“谜”部分)。然后参数被使用'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 时(使用您的服务器设置),就会创建一个新套接字,该套接字使用 socket.on 方法侦听您的用户客户端操作,(例如消息) ,然后执行一个回调函数(例如通过io.emit(...)将该消息广播给所有其他连接的用户。我认为io对象是让服务器监听全局事件(例如新用户连接)或从服务器广播到所有其他用户……而套接字对象是对特定于用户的事件做出反应……但我不能 100% 确定那里的所有差异……

标签: socket.io


【解决方案1】:

在您的代码示例中,io 是一个 Socket.IO 服务器实例,附加到一个侦听传入事件的 http.Server 实例。

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);

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2019-01-29
    • 2012-04-24
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多