Web 领域的实时推送技术,也被称作 Realtime 技术。这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新。它有着广泛的应用场景,比如在线聊天室、在线客服系统、评论系统、WebIM 等。
今天将以多人在线聊天应用作为实例场景,我们先来确定这个聊天应用的基本需求。
需求分析
1、兼容不支持 WebSocket 的低版本浏览器。
2、允许客户端有相同的用户名。
3、进入聊天室后可以看到当前在线的用户和在线人数。
4、用户上线或退出,所有在线的客户端应该实时更新。
5、用户发送消息,所有客户端实时收取。
在实际的开发过程中,为了使用 WebSocket 接口构建 Web 应用,我们首先需要构建一个实现了 WebSocket 规范的服务端,服务端的实现不受平台和开发语言的限制,只需要遵从 WebSocket 规范即可,目前已经出现了一些比较成熟的 WebSocket 服务端实现,比如本文使用的 Node.js Socket.IO。为什么选用这个方案呢?先来简单介绍下。
Node.js
Node.js 采用 C 语言编写而成,它不是 Javascript 应用,而是一个 Javascript 的运行环境,据 Node.js 创始人 Ryan Dahl 回忆,他最初希望采用 Ruby 来写 Node.js,但是后来发现 Ruby 虚拟机的性能不能满足他的要求,后来他尝试采用 V8 引擎,所以选择了 C 语言。
Node.js 支持的系统包括*nux、Windows,这意味着程序员可以编写系统级或者服务器端的 Javascript 代码,交给 Node.js 来解释执行。Node.js 的 Web 开发框架 Express,可以帮助程序员快速建立 web 站点,从 2009 年诞生至今,Node.js 的 成长的速度有目共睹,其发展前景获得了技术社区的充分肯定。
Socket.IO
Socket.IO 是一个开源的 WebSocket 库,它通过 Node.js 实现 WebSocket 服务端,同时也提供客户端 JS 库。Socket.IO 支持以事件为基础的实时双向通讯,它可以工作在任何平台、浏览器或移动设备。
Socket.IO 支持 4 种协议:WebSocket、htmlfile、xhr-polling、jsonp-polling,它会自动根据浏览 器选择适合的通讯方式,从而让开发者可以聚焦到功能的实现而不是平台的兼容性,同时 Socket.IO 具有不错的稳定性和性能。
搭建 WebSocket 服务端
我们用 node.js 的 express socket.io 来实现今天的任务。
先进入到你的工作目录,比如
app.js 服务端
/public 客户端
代码不贴了,有兴趣的去 github 看源代码.
源代码地址:https://github.com/maixiaojie/easychat
总结
和 ajax 的一些区别:
ajax 实现了从客户端到服务器的推送技术,而要实现从服务器到客户端就比较麻烦了,我们知道的反向 ajax 就是从服务器到客户端。
socket 可以平等的实现客户端服务器之间的通信。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于