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。

原文地址:https://www.cnblogs.com/goOtter/p/10115870.html

时间: 2024-10-05 10:43:50

Socket.IO API Socket的相关文章

Socket.IO 概述

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3826251.html Socket.IO简述 Socket.IO用于浏览器与node.js之间实现实时通信.Socket.IO设计的目标是支持任何的浏览器,任何Mobile设备.支持主流的PC浏览器 (IE,Safari,Chrome,Firefox,Opera等),Mobile浏览器(iphone Safari/ipa

使用Node.js+Socket.IO搭建WebSocket实时应用

Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. 作者:潘良虎链接:https://www.zhihu.com/question/20215561/answer/26419995来源:知乎原文地址:http://www.plhwin.com/2014/05/28/nodejs-socketio/ WebSocket简介 谈到Web实时推送,就不得不说

socket.io获取客户端的IP地址(修正官方1.0.4版本BUG)

之前我有看过别人写的文章,说到如何获取客户端IP地址,代码如下: var io = require("socket.io").listen(server); io.sockets.on("connection", function (socket) { var address = socket.handshake.address; console.log("New connection from " + address.address + &qu

socket.io emit callback调用探秘

socket.io https://socket.io/ https://socket.io/docs/ What Socket.IO is Socket.IO is a library that enables real-time, bidirectional and event-based communication between the browser and the server. It consists of: a Node.js server: Source | API a Jav

socket.io对IE8的支持

默认下载了最新版的socket.io,版本号是1.7.2,对IE8的支持不好,反正在IE8下收发消息都不行.在网上查了很多资料,都解决不了IE8的问题,崩溃. 最后用了一个大家比较认可的版本1.0.6,可以支持IE8: 卸载socket.io npm uninstall socket.io 安装1.0.6版本的socket.io npm install [email protected] 后面的一些版本没有一一的去试,下了一个1.3.7版本的,还是可以支持收发消息的,只是发现IE8在关闭窗口时,

socket.io+angular.js+express.js做个聊天应用(三)

接着前面博客文章socket.io+angular.js+express.js做个聊天应用(二) 首先开发之前先介绍下bower.它是用来管理前端类库的(详细介绍,安装可看http://blog.csdn.net/edagarli/article/details/26359535) [email protected]:~/projects/nodejs/chattingnode$ bower Usage: bower <command> [<args>] [<options&

socket.io实践(一.实现简单的图表推送)

引子:随着nodejs蓬勃发展,虽然主要业务系统因为架构健壮性不会选择nodejs座位应用服务器.但是大量的内部系统却可以使用nodejs试水,大量的前端开发人员转入全堆开发也是一个因素. 研究本例主要为后期BI软件,CRM图标系统使用nodejs socket做铺垫.主要实现的是一个分析表图的推送. socketio.io 代码库以及官网 https://github.com/socketio/socket.io http://socket.io/ 使用redis来实现集群读写 消息 (采用订

Nodejs 中使用Socket.io

安装socket.io npm install socket.io 或者在package.json文件中添加socket.io的依赖包,然后npm install安装所需模块. 在Express http服务器中使用socket.io 在 bin/www 文件中添加: var io = require('socket.io'); var socket = io.listen(server); socket.on('connection', function(client) { console.l

websocket与socket.io

什么是Websocket? Websocket是一个独立于http的实时通信协议,最初是在HTML5中被引用进来的,在HTML5规范中作为浏览器与服务器的核心通信技术被嵌入到浏览器中.WebSocket的出现使得浏览器提供对Socket的支持成为可能,从而在浏览器和服务器之间提供了一个基于TCP连接的双向通道. 在websocket诞生之前,服务端想要向客户端推送数据只能通过客户端向服务端主动发送请求才能获得.在构建实时Web应用时,最常用的就是轮询 (Polling)和Comet技术,而Com