当前位置: 首页 > news >正文

《Node应用程序构建——使用MongoDB和Backbone》一2.4 Socket.io

本节书摘来自异步社区《Node应用程序构建——使用MongoDB和Backbone》一书中的第2章,第2.4节,作者【美】Mike Wilson,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.4 Socket.io

Node应用程序构建——使用MongoDB和Backbone
Socket.io是你的朋友。它将消除制作实时网络应用程序时的乏味工作,处理所有跨浏览器兼容的问题,在你的后端Node服务器和前端JavaScript客户端之间,留出干净、简单的JavaScript接口。这是一个令人激动的库,因为作为一个程序员,它让你专注于单一脚本语言的程序代码,消除数据和最终用户之间的网络障碍。

要安装Socket.id,就用npm。


3c67e2ea3432c41e5d08f3aa55e524383f4e7425

例2-7为网站添加了实时聊天功能,它创建了一个Socket.io对象,并将其附加到http.Server上,在Express之前。在接到浏览器的socket连接时,Socket.io触发应用内的一个回调函数,向连接用户发出任意的一段欢迎消息。sendChat函数是为了方便而创建的;给定标题和内容,它使用Socket.io的emit命令发送一段JSON数据给连接的socket。因为它在回调函数之内,所以对所有socket级别的事件是可见的,但对应用的其他部分是不可见的。

例2-7 为Express服务器添加实时聊天功能


16248b2801d8380b5df1569ab2dd082bef23e3cb

socket.on('chat'…)这行代码创建了一个事件回调,每当连接的用户往socket发送消息时,就会执行。这里没有太多功能,服务器只是将用户发来的消息直接显示给他们。

为了给这个例子增加点活力,我已经将一个JavaScript的setInterval函数与其回调函数包含了进来,每隔5秒钟,它会向连接的客户端随机发送3个配角的一句口头禅。

在例2-7中,Express服务器的实例化和之前的例子不同。它不是让Express对象直接监听传入的连接,而是先通过http.createServer(app)函数附加在http.Server中,得到的服务器对象再监听进入的连接。在幕后,Express的listen命令做同样的事而不暴露http.Server。采用这种方式,你要暴露http.Server,以便让Socket.io连接到它。

例2-8的聊天布局在block scripts中加入了内容,在浏览器中渲染时,它在HTML内容中加上了Socket.io的功能。Socket.io使某些文件可供下载,这就是为什么你可以包含对/socket.io/socket.io.js的脚本引用。JavaScript文件socket.io.js包含了浏览器连接到socket服务器所需的全部功能,它还包含回退机制,为过时的、不支持Web socket的浏览器提供类似socket的功能。

例2-8 聊天页面的Jade模板(chat.jade)


4004c328693200641f761ac0c2dc435260da9b32

一旦提交按钮被激活,Socket.io会发出聊天框的内容。在从网络服务器接收聊天事件后,Socket.io会把传入的消息内容替换到聊天显示窗口(div#chat)。重要的是,要注意到socket事件和函数不论用在客户端上还是网络服务器上都是完全相同的。这让你为整个应用程序提供了一个干净的通信联系,无需担心传输或接收的数据需要转换。

相关文章:

  • 《C++ 黑客编程揭秘与防范(第2版)》—第6章6.2节详解PE文件结构
  • 《Adobe Illustrator CS5中文版经典教程》—第0课0.16节 使用符号
  • 《Nmap渗透测试指南》—第1章1.3节Linux/Unix源码编译安装Nmap
  • 《嵌入式 Linux C 语言应用程序设计(修订版)》——本章小结
  • 《创意特训营——30天超级灵感唤醒术》—第1章1.4节增加创意的数量
  • 《游戏大师Chris Crawford谈互动叙事》一9.3 互动小说(Interactive Fiction,IF):文字冒险的继承者...
  • 《Wireshark网络分析实战》—第1章1.2节安置Wireshark(程序或主机)
  • 《精通QTP——自动化测试技术领航》—第1章1.2节帮助文档(HELP)-QTP的说明书...
  • 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——9.16 技巧:使用主题来更改配色方案...
  • 如何使用Aptik来备份和恢复Ubuntu中的Apps和PPAs
  • 《游戏大师Chris Crawford谈互动叙事》一导读
  • 麻省理工设计出可以快速生产和应用的可编程RNA疫苗
  • ReentrantLock(重入锁)以及公平性
  • 《OOD启思录》—第2章2.2节消息和方法
  • Linux 平台下 Python 脚本编程入门(一)
  • JavaScript-如何实现克隆(clone)函数
  • 收藏网友的 源程序下载网
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • css系列之关于字体的事
  • es6
  • ES6核心特性
  • gulp 教程
  • Java反射-动态类加载和重新加载
  • java概述
  • python学习笔记-类对象的信息
  • Twitter赢在开放,三年创造奇迹
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 第2章 网络文档
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 京东美团研发面经
  • 移动端 h5开发相关内容总结(三)
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # include “ “ 和 # include < >两者的区别
  • #{} 和 ${}区别
  • $(selector).each()和$.each()的区别
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (6)添加vue-cookie
  • (C语言)逆序输出字符串
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (八)Flask之app.route装饰器函数的参数
  • (二)springcloud实战之config配置中心
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (力扣题库)跳跃游戏II(c++)
  • (生成器)yield与(迭代器)generator
  • (原)Matlab的svmtrain和svmclassify
  • (转)四层和七层负载均衡的区别
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET连接MongoDB数据库实例教程
  • @Autowired自动装配