`
hongtoushizi
  • 浏览: 358059 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Socket.IO进阶

 
阅读更多

转载自:  http://raytaylorlin.com/Tech/web/Node.js/socket-io-advanced

 

Socket.IO进阶

2013-12-10

在上一篇博文Socket.IO中,我简要介绍了Socket.IO的基本使用方法并创建了一个简单的聊天室DEMO。本篇在入门篇的基础上,继续探讨Socket.IO的进阶用法。本篇将从配置、房间、事件等方面入手,介绍一些Socket.IO中实用的API和注意事项。

1. 配置

Socket.IO提供了4个配置的API:io.configure, io.set, io.enable, io.disable。其中io.set对单项进行设置,io.enable和io.disable用于单项设置布尔型的配置。io.configure可以让你对不同的生产环境(如devlopment,test等等)配置不同的参数。以下定义了development和release两种环境下Socket.IO的不同配置:

var io =require('socket.io').listen(80);

io.configure('development',function(){
    io.enable('browser client etag');
    io.set('log level',1);});

io.configure('release',function(){
    io.set('transports',['websocket']);});

下面列举一些常用的配置项,具体配置参数参见官方WIKI

  • transports(默认['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']):一个包含通信方法类型的数组。Socket.IO支持多种实现在线即时通信的方式,如websocket、polling等等,该配置能让你自行选择备用的通信方式。
  • log level(默认3):日志输出的最低级别,0为error,1为warn,2为info,3为debug,默认即输出所有类型的日志。
  • heartbeat interval(默认25秒):心跳包发送间隔,客户端需要在此时间段之内向服务器发送一个心跳包才能保持通信。

2. 房间

房间是Socket.IO提供的一个非常好用的功能。房间相当于为指定的一些客户端提供了一个命名空间,所有在房间里的广播和通信都不会影响到房间以外的客户端。

在入门篇中,我们知道socket.join('room name')可用于客户端进入房间,socket.leave('room name')用于离开房间。当客户端进入一个房间之后,可以通过以下两种方式在房间里广播消息:

//1. 向my room广播一个事件,提交者会被排除在外(即不会收到消息)
io.sockets.on('connection',function(socket){//注意:和下面对比,这里是从客户端的角度来提交事件
    socket.broadcast.to('my room').emit('event_name', data);}//2. 向another room广播一个事件,在此房间所有客户端都会收到消息//注意:和上面对比,这里是从服务器的角度来提交事件
io.sockets.in('another room').emit('event_name', data);//向所有客户端广播
io.sockets.emit('event_name', data);

除了向房间广播消息之外,还可以通过以下API来获取房间的信息。

//获取所有房间的信息//key为房间名,value为房间名对应的socket ID数组
io.sockets.manager.rooms

//获取particular room中的客户端,返回所有在此房间的socket实例
io.sockets.clients('particular room')//通过socket.id来获取此socket进入的房间信息
io.sockets.manager.roomClients[socket.id]

3. 事件

Socket.IO内置了一些默认事件,我们在设计事件的时候应该避开默认的事件名称,并灵活运用这些默认事件。

服务器端事件:

  • io.sockets.on('connection', function(socket) {}):socket连接成功之后触发,用于初始化
  • socket.on('message', function(message, callback) {}):客户端通过socket.send来传送消息时触发此事件,message为传输的消息,callback是收到消息后要执行的回调
  • socket.on('anything', function(data) {}):收到任何事件时触发
  • socket.on('disconnect', function() {}):socket失去连接时触发(包括关闭浏览器,主动断开,掉线等任何断开连接的情况)

客户端事件:

  • connect:连接成功
  • connecting:正在连接
  • disconnect:断开连接
  • connect_failed:连接失败
  • error:错误发生,并且无法被其他事件类型所处理
  • message:同服务器端message事件
  • anything:同服务器端anything事件
  • reconnect_failed:重连失败
  • reconnect:成功重连
  • reconnecting:正在重连

在这里要提下客户端socket发起连接时的顺序。当第一次连接时,事件触发顺序为:connecting->connect;当失去连接时,事件触发顺序为:disconnect->reconnecting(可能进行多次)->connecting->reconnect->connect。

4. 授权

  • 向所有客户端广播:socket.broadcast.emit('broadcast message');

  • 进入一个房间(非常好用!相当于一个命名空间,可以对一个特定的房间广播而不影响在其他房间或不在房间的客户端):socket.join('your room name');

  • 向一个房间广播消息(发送者收不到消息):socket.broadcast.to('your room name').emit('broadcast room message');

  • 向一个房间广播消息(包括发送者都能收到消息)(这个API属于io.sockets):io.sockets.in('another room name').emit('broadcast room message');

  • 强制使用WebSocket通信:(客户端)socket.send('hi'),(服务器)用socket.on('message', function(data){})来接收。

Socket.IO的进阶用法介绍基本就到这里。个人感觉在日常使用的时候这些基本API已经够用了,这也体现了Socket.IO极其简洁易用的设计哲学。本文只是抛砖引玉,当在实际运用中遇到解决不了的问题时,再去查看官方详细的WIKI会比较好。

参考文献:Socket.IO官方WIKI

所属目录: Tech -> web -> Node.js

 

/

分享到:
评论

相关推荐

    node.js中Socket.IO的进阶使用技巧

    本篇在入门篇的基础上,继续探讨Socket.IO的进阶用法。本篇将从配置、房间、事件等方面入手,介绍一些Socket.IO中实用的API和注意事项。 1. 配置 Socket.IO提供了4个配置的API:io.configure, io.set, io.enable, io...

    操作系统课程设计,基于vue+socket.io的即时通讯应用.zip

    2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...

    基于Node.js+socket.io+express做的简单的web在线聊天例子-WebTalk.zip

    适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究...

    基于 React + Koa + MySQL + JWT + Socket.io 的即时通讯聊天室。.zip

    适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究...

    基于springBoot + netty-socket.io + mongodb 的即时聊天后台+源代码+文档说明

    2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...

    大数据可视化基于 koa ,mysql,mogongdb,socket.io 进行开发,整合系统配置(用户,角色,菜.zip

    适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究...

    基于vue-cli 3.0 搭建的动态可视化配置大屏,socket.io 实时推送。更多组件支持选择.zip

    适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究...

    2018Web全栈架构师精品课程

    10.NodeJS使用MySQL、socket.io入门 11.websocket原理 12.Ajax2.0-FormData和Cors 13.upload和FileReade 14.HTML5特性 15.Css3基础 16.HTML5移动端基础 17.touch事件基础 18.touch多点触摸事件 19.iscroll.js、...

    java网络编程

    java网络编程包括socket tcp/udp io/nio讲解 http协议 jdbc rmi java的安全框架等知识

    基于Node.js+koa+React实现的你画我猜多人在线聊天室系统源码+运行说明.zip

    1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用! 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工...客户端React+RxJS+socket.io,基于canvas实现绘图,服务端node.js+koa

    java进阶13天资料.zip

    Java进阶13天资料 day01-复习回顾、静态、继承、引用类型使用 day02-抽象类、接口、代码块,final、单例、枚举 day03-多态、包、权限修饰符、内部类,Object类,Date类 day04-常用API、正则表达式,泛型、Collection...

    Android进阶——安卓调用ESC/POS打印机打印实例

    前一段时间由于工作需要,要研究一下安卓程序调用打印机打印小票,并且要求不能使用蓝牙调用,研究了一下,可以利用socket连接,来实现打印功能。写了个Demo,分享一下。 工具:一台打印机(芯烨XP-80XX),一台...

    Cocos2d-x实战 C++卷,完整扫描版

    第三篇数据与网络,即第13章~第17章,内容包括Cocos2d-x中使用的数据容器类、数据持久化、数据交换格式、基于HTTP网络通信和基于Node.js的Socket.IO网络通信。 第四篇设计与优化,即第18章~第20章,内容包括Cocos...

    基于WebRtc+node.js+express+PeerJS构建的多人即时视频通话项目源码+项目说明.zip

    `const Socket io([ip地址:端口号]);` ![图片1 更改io中地址][图片1] `var peer = new Peer({ host: [ip地址], port: [端口号],...});` ![图片2 更改peer中地址][图片2] --- 如果使用的是局域网ip,http协议,...

    基于C++实现的轻量级Web服务器源码+项目说明.zip

    3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在...

    Java8深入分析

    Java语言进阶视频教程,该课程针对有一定Java基础的学员,详细讲解Java多线程、XML、Socket、Swing、IO流、反射、注解,还有传值与传址的区别 、递归算法等,使学员熟练掌握JavaSE技术,轻松应对职场挑战。

    java多线程tcpsocketserver源码-Java-Book:Java学习资料整理

    --(这三本书主要还是看看Linux下的IO模型,select 和epoll的区别,后面有的框架会涉及到这些内容,比如netty) Unix网络编程 Linux 系统编程手册 Java 基础和进阶 疯狂Java讲义 Java 核心基础卷1/2 Java编程思想 Java...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

Global site tag (gtag.js) - Google Analytics