天天看点

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

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

node应用程序构建——使用mongodb和backbone

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

要安装socket.id,就用npm。

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

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

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

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

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)

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

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

继续阅读