从这回开始,我们来搭建一个简单的聊天室。因为 http 协议是无状态的,搭建聊天室这样的事从来都让人觉得疙疙瘩瘩的不是那么顺理成章。如果不使用 flash、applet 等浏览器插件的话,我们需要定期轮询服务器来获取大家的聊天信息。这造成了一定的延迟和大量的网络通讯。
不过,随着 HTML5 的浮出水面,这一情况有望彻底改观了。在 HTML5 的众多特性中,有一个总是悄悄站在幕后的大哥级人物,他就是 WebSocket 。WebSocket 实在是太强大了,Firefox 浏览器在支持一段时间后,觉得实在不能保证这位大哥不会干出点什么出格的事,把他打入冷宫。可是正如毛遂说的,钉子放在口袋里,迟早都会冒出头的。现在最新版的 Chrome 、 Firefox 均支持 WebSocket ,还有 IE 10 据说也将支持。
一、WebSocket 是什么?
在说明 WebSocket 的时候,我们需要和 HTTP 对比来看,才会发现他的价值。
HTTP
|
WebSocket
|
双向、但是半双工
|
双向全双工
|
无状态
|
持续连接
|
高延迟
|
实时,事件驱动
|
高带宽消耗
|
低带宽消耗
|
面向文档设计
|
文档、二进制均可,客户端不局限于浏览器
|
好了,比也比完了,如果你还有点迷糊的话,哎,那我辛苦点,打个比方好了。我们把服务器比做一位美丽的公主,我们就是那苦命的追求者,之一。 http 时代:我们写了一封信(request),交给书童,快,送信去,路上别偷懒。书童到了公主的宫殿,在门口被拦了下来,交出路条(request headers),哦,进去吧。还好,公主对我们也还算热情,很快写好了信(response),放进信封,贴上标签(response headers) ,交给书童。书童再屁颠屁颠跑回来交给我们。随着我们和公主感情的不断升温,我们开始豢养一群名叫阿贾克斯的信鸽,这样,就可以很快地把我们写的小诗小词送给公主了。公主如果想我们的时候,也可以在有信鸽来的时候,把她的手帕啊什么的栓在鸽子腿上给我们捎回来。HTML5 时代来了,我们和公主的关系也开始如胶似漆起来,光靠信件和便签已经不能满足了,还好,我们有 WebSocket ,只要我们让书童送去一封信,WebSocket 就会来在我们和公主之间架起一条电话热线,这样公主说话您立刻就能听见,您说话公主也立刻能听见,当然,因为这条热线是双向全双工的,你们还可以一起合唱一首小情歌。
好了,说下个人的理解,不知道对不对,权当参考:WebSocket 就是通过 http 协议实现握手的 socket 。
下面是摘自 Kaazing 《WebSocket –The Web Communication Revolution 》 中的一副图:
二、WebSocket 能干什么?
理论上,socket 能干什么,他就能干什么。
这个问号的答案是无限的,我们看看这个在线版的 Quake 游戏吧,也许他能点亮我们的大脑。
家庭作业:和你的本我、自我、大我、小我开个头脑风暴会,讨论 WebSocket 对 Web 应用开发的深刻影响。
三、WebSocket 协议与 Socket.IO 模块
WebSocket 规范由客户端和服务器端规范分别组成。客户端由 W3C 制订,服务器端规范由 IETF 制订。Node.js 的第三方模块 Socket.IO 提供在 Node.js 上使用 WebSocket 协议的能力。
说得已经够多了,下面动手了。
建一个项目文件夹,这里我用 chatroom 好了,您自便。打开命令行窗口,移步到 chatroom 目录下,键入如下命令:
D:\chatroom> npm install socket.io –d
见图:(-d 参数可以使我们能够观察到安装的详细情况,但有资料说 –d 是安装齐所有依赖包,不管了,加上总比不加好,是吧?)
如果最后出现“ npm info ok ”,恭喜你,socket.io 模块安装成功。查看 chatroom 目录,得到如下结构:
四、还是先打地基
准备工作完成后,我们还是先写一个最最最简的架子,然后测试他。
请看代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
var http = require( 'http' ),
socketio = require( 'socket.io' );
var app = http.createServer( function (request,response){
response.end( 'Server ok.' );
}) ;
app.listen(888);
console.log( "Http Server start at 888" );
var io = socketio.listen(app);
io.sockets.on( 'connection' , function (socket) {
console.log( "Websocket connect ok ..." );
});
|
保持为 app.js 文件。运行。
D:\chatroom> node app.js
如果见到如下图,那么恭喜你,WebSocket 已经准备好来为我们的聊天室服务了。
看提示第一行是我们输出的说明 http 服务启动的信息,第二行是 Node.js ,或者准确地说是 Socket.IO 给我们的提示信息,真体贴啊。听是在听了,那么他们有没有谎报军情呢?试试看就知道了。
请打开浏览器,等等,什么浏览器都可以吗?你不是说只有 chrome 和 火狐? 呃,差点忘了,Socket.IO 不仅帮助我们实现了 WebSocket 协议,还帮助我们提高了浏览器的兼容性,现在已经支持 IE5+、Safari 3+、 Chrome 4+、火狐 3+、Opera 10.61+,还支持一些手机和平板上得浏览器。
http://localhost:888/socket.io/socket.io.js
观察控制台和浏览器,你会发现控制台提示你: debug – served static content /socket.io.js ,而浏览器我们也得到了一段,不,一大段 js 代码,这说明我们的任务完成了。 Http 服务正常,WebSocket 服务正常,火箭即将发射!
----------------------- 平安夜的分割线,祝大家平安夜快乐 -----------------------------------------
我知道您有疑问,那段 js 代码是什么?哪里来的。嗯,欲知后事如何,请听下回分解。
分享到:
相关推荐
mqtt.js库,下载后可以用找我要源码和压缩文件(mqtt.min.js),有问题随时请教
WebSocket是Web应用中实现双向通信的一种技术,它允许服务器与客户端之间建立长连接,从而实现实时、低延迟的数据交换。在Node.js环境中,WebSocket的使用变得尤为方便,因为Node.js自身提供了对异步I/O操作的良好...
《Node.js开发实战 视频教程 下载 因为太大存百度云盘1》是一部针对Node.js初学者和进阶者的全面教程,旨在通过实践案例帮助学习者掌握Node.js的核心概念和技术。本教程可能涵盖了以下几个重要的知识点: 1. **Node...
《新时期的Node.js入门》是李锴在2018年1月出版的一本专为初学者准备的Node.js教程,旨在帮助读者快速掌握这个强大的JavaScript后端开发平台。本书通过丰富的示例代码,深入浅出地介绍了Node.js的基础知识和实际应用...
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让开发者能够在服务器端使用JavaScript进行编程。在本项目中,"Node.js-WebSSH2基于Web的SSH2客户端使用xterm.js、socket.io和ssh2实现",我们关注的是构建...
Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。这本《Node入门一本全面地Node.js教程》PDF,是学习Node.js的基础指南,涵盖了从安装到实际项目开发的全方位...
Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript进行服务器端编程,打破了JavaScript只能在浏览器中运行的传统。这个资料包包含了五本关于Node.js的电子书籍,涵盖了从基础到进阶...
node.js websocket socket.io unity 同步 使用Node.js+socket.io制作服务端,unity+socket.io for unity 制作客户端 ,验证位置同步Demo (Javascript代码可使用Webstorm等IDE进行编写)
而Socket.IO则是在Node.js之上构建的一个强大的库,不仅提供了WebSocket的完整实现,还支持多种回退方案以确保良好的兼容性。 - **Node.js的优势**: - **异步非阻塞I/O**:这使得Node.js能够高效处理大量并发连接...
《Node.js冒险——深入WebSocket客户端实现》 在现代Web应用中,实时通信是不可或缺的一部分,它使得用户可以即时获取更新信息,例如在线聊天、实时股票报价或者多人协作工具。Node.js,作为JavaScript运行时环境,...
基于Node.js框架Koa实现的Websocket聊天机器人源码(毕业设计).zip基于Node.js框架Koa实现的Websocket聊天机器人源码(毕业设计).zip基于Node.js框架Koa实现的Websocket聊天机器人源码(毕业设计).zip基于Node.js框架...
Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。这个“node.js安装包”包含了两个不同版本——4.6.0和6.2.0,分别针对Windows 32位和64位操作系统。在IT行业...
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它以其异步、事件驱动的非阻塞I/O模型而闻名,非常适合构建高性能的网络应用,如聊天室。 首先,让我们了解Node.js的核心概念。Node.js使用事件循环来处理...
本项目以"node.js搭建的聊天小程序"为主题,旨在展示如何利用WebSocket技术创建一个简单的微信小程序聊天应用。WebSocket是一种在客户端和服务器之间建立长连接的协议,它允许双向通信,使得实时交互成为可能,非常...
在本文中,我们将深入探讨如何使用Node.js和WebSocket技术来构建一个简单的实时聊天应用程序。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许我们在服务器端使用JavaScript编写高性能的应用程序。...
《Node.js基础开发指南》是一本全面介绍Node.js技术的中文教材,旨在帮助读者从零开始掌握这个强大的JavaScript运行环境。Node.js以其异步、事件驱动的非阻塞I/O模型,使其在处理高并发、实时应用方面表现出色。本...
Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,因其异步、事件驱动的特性,非常适合处理高并发的实时数据交换。而WebSockets协议则为双向通信提供了标准,使得服务器和客户端可以持续保持连接状态,实现...
首先,Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者在服务器端使用 JavaScript 开发应用。通过 Node.js,我们可以创建高效、可扩展的网络应用,特别适合处理大量并发连接。 在实现聊天...
Node.js是一个开放源代码、跨平台的JavaScript运行环境,非常适合构建高性能的网络应用,包括WebSocket服务器。在Node.js中,有多个WebSocket库可供选择,其中ws库是最常用的,它提供了一个轻量级且高效的WebSocket...
在这个"websocket_node.js(最新安装包+例子+API)node-v0.8.15-x86"的压缩包中,包含的是Node.js的一个较旧版本(v0.8.15)的32位安装包,同时提供了WebSocket相关的示例和API文档,特别强调了二进制流传输和视频通信...