zoukankan      html  css  js  c++  java
  • Socket.IO API Socket

    Socket

    Socket类继承自EventEmitter。覆写了emit方法,保留了EventEmitter的其他方法

    socket.id

    会话的唯一标识符,来自于底层的Client

    socket.rooms

    标识此客户端所在房间的字符串哈希值,按房间名称编制索引

    socket.client

    对底层Client对象的引用。

    socket.conn

    对底层Client传输连接的引用(engine.io Socket对象)

    socket.request

    一个getter代理,它返回对request发起底层engine.io的引用Client。用于访问请求标头,如Cookie或User-Agent。

    socket.handshake

    请求细节

    {
      headers: /* 作为握手一部分的请求头信息*/,
      time: /* 创建时间(as string) */,
      address: /* 客户端ip */,
      xdomain: /* 是否跨域 */,
      secure: /* 是否为https */,
      issued: /* 创建时间 (as unix timestamp) */,
      url: /* 请求地址*/,
      query: /* 查询对象 */
    }
    

    socket.use(FN)

    注册中间件

    socket.send([... args] [,ack])

    发送一个message事件

    socket.emit(eventName [,... args] [,ack])

    触发一个事件,可以包括任意的参数,支持所有可序列化的参数

    ack参数时可选的,将使用客户端的响应值进行调用

    io.on('connection', (socket) => {
      socket.emit('an event', { some: 'data' });
    
      socket.emit('ferret', 'tobi', (data) => {
        console.log(data); // data will be 'woot'
      });
    
      // the client code
      // client.on('ferret', (name, fn) => {
      //   fn('woot');
      // });
    
    });
    

    socket.on(eventName, callback)

    为给定的事件注册一个回调函数

    socket.once(eventName, listener) socket.removeListener(eventName, listener) socket.removeAllListeners([eventName]) socket.eventNames()

    继承自EventEmitter

    socket.join(room[, callback])

    将客户端添加到room,并可选择触发带err签名的回调(如果有)

    连接房间的机制由Server Adapter已配置的

    为方便起见,每个套接字自动加入由其id标识的房间,这样可以轻松的广播消息到其他套接字

    io.on('connection', (socket) => {
      socket.on('say to someone', (id, msg) => {
        // send a private message to the socket with the given id
        socket.to(id).emit('my message', msg);
      });
    });
    

    socket.join(rooms [,callback])

    将客户端添加到room列表中,并可选择触发带err签名的回调(如果有)

    socket.leave(room [,callback])

    从room中删除客户端

    socket.leave(room [,callback])

    向一个或一系列房间中广播消息

    socket.to(room) socket.in

    io.on('connection', (socket) => {
    
      // to one room
      socket.to('others').emit('an event', { some: 'data' });
    
      // to multiple rooms
      socket.to('room1').to('room2').emit('hello');
    
      // a private message to another socket
      socket.to(/* another socket id */).emit('hey');
    
      // WARNING: `socket.to(socket.id).emit()` will NOT work, as it will send to everyone in the room
      // named `socket.id` but the sender. Please use the classic `socket.emit()` instead.
    });
    

    socket.compress(value)

    value值为真时,压缩事件数据。默认为true

    socket.disconnect(close)

    断开此客户端。如果close值为ture,则关闭底层连接。否则,只断开命名空间

    Flag: ‘broadcast’

    将事件广播到除发送者之外的所有socket

    io.on('connection',(socket)=> { 
      socket.broadcast.emit('an event',{ some:'data' }); //每个人都得到它但发送者
     });
    

    Flag: ‘volatile’ Flag: ‘binary’

    类似命名空间API中的定义

    Event: ‘disconnect’

    断开连接时触发

    io.on('connection', (socket) => {
      socket.on('disconnect', (reason) => {
        // ...
      });
    });
    

    可能原因

    Event: ‘error’

    发生错误时触发

    io.on('connection', (socket) => {
      socket.on('error', (error) => {
        // ...
      });
    });
    

    Event: ‘disconnecting’

    在客户端将要断开连接时触发(但尚未离开rooms)

    io.on('connection', (socket) => {
      socket.on('disconnecting', (reason) => {
        let rooms = Object.keys(socket.rooms);
        // ...
      });
    });
    

    Client

    client.conn

    对底层engine.io Socket连接的引用。

    client.request

    一个getter代理,它返回request对origin.io连接的引用。用于访问请求标头,如Cookie或User-Agent。

  • 相关阅读:
    mailto发送邮件
    使用css实现一个持续的动画效果
    documentFragment添加节点
    删除数组的第一个元素,不要直接修改数组,结果返回新的数组
    js数组去重
    css定位position(侧边栏导航)
    mongoexport导出mongodb数据库中的数据
    textarea头部不顶行问题和textarea禁止拉伸
    HTML meta标签
    textarea
  • 原文地址:https://www.cnblogs.com/goOtter/p/10115870.html
Copyright © 2011-2022 走看看