随着互联网的普及,实时通信在网站构建中成为了必不可少的一环。实时通信能够增强网站与用户之间的交互体验,而 Hapijs 和 Socket.io 则分别是 Node.js 框架和 Websocket 套件的代表。本文将会介绍如何使用 Hapijs 和 Socket.io 两个工具库,实现一个简单的实时通信网站,并带有示例的完整代码。
Hapijs 简介
Hapijs 是一个用于构建应用程序的 Node.js 框架,其核心功能包括路由定义、插件管理、输入数据验证等。这款框架的特点在于其智能配置和插件化,完整了和按需构建的特性。同时其易用性和扩展性也非常高,在大型项目中也有不错的表现。
Socket.io 简介
Socket.io 是一个基于 Websocket 的实时网络通信库,能够使浏览器和服务器之间建立稳固的双向连接。通过它,我们可以保持客户端与服务器之间始终保持连接,从而实现实时通信。同时 Socket.io 还有一个优秀的特性是其自动降级为垂直传输方式,这就可以保证在不支持 Websocket 的情况下也可以做到实时通信,在网络较慢或不稳定的环境下也能够居功至伟。
开始使用 Hapijs + Socket.io
在开始代码编写之前,我们需要先搭建一个 Node.js 服务。可以通过执行以下命令创建一个基础的 Hapijs 项目:
$ npm init $ npm install hapi --save
使用 Hapijs 创建服务器的代码如下:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ------------- ----- ---- --- ----- -------- ------------- - ----- --------------- ------------------- ------- -- ---- ----------------- - --------------
此时运行 node index.js
就可以看到服务器监听在 localhost:3000 上了。
接着,让我们继续添加 Socket.io 到项目中:
$ npm install socket.io --save
引入 Socket.io 并且将其绑定在 Hapijs 服务器上如下:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ------------- ----- ---- --- ----- -- - -------------------------------------- ----- -------- ------------- - ----- --------------- ------------------- ------- -- ---- ----------------- - --------------
在这里,我们将服务器的 listener 传递给 Socket.io,使得 Socket 可以监听和返回从客户端发来的消息。
现在,我们已经搭建好了一个基础的 Hapijs 服务,并且引入了 Socket.io。接下来就是实现实时通信的核心了。
为了能够进行实时通信,在客户端和服务器之间需要交换信息,而这本质上是依赖于 Socket.io 提供的几个核心事件。
在客户端,我们可以使用一些方法从服务器获取信息(例如,获取当前在线用户列表):
-- -------------------- ---- ------- ----- ------ - ------------- -------------------- -- -- - ---------------------- -- --------- -- -------- ----------------------------- ------- -- - ------------------- --- --- ----------------------- -- -- - ------------------------- ---- --------- --- ----------------------- --------- -- - ---------------- ------- ----------- --------- ---
其中,我们使用 io.connect()
来建立连接,然后在 connect
事件中,我们可以获取到当前在线用户列表。当服务器和客户端之间建立了连接之后,我们使用 socket.emit()
向服务器发送指令,然后服务器会返回相应的信息。
在服务器端,我们可以利用 socket.on()
方法监听服务器和客户端之间的消息:
-- -------------------- ---- ------- ------------------- -------- -- - ----------------- ------------ ----------- -- -------- --------------------------- -- -- - ---------------------- ----------------------------------- --- ----------------------- -- -- - ----------------- --------------- ----------- --- ---
在这里我们监听了 connection
事件来监听服务端和客户端之间的连接事件。当有客户端连接上服务器时,它所对应的 socket.id
会被记录下来。之后我们可以根据该客户端的 id 来进行信息的交互。比如,我们可以在 getOnlineUsers
事件中向客户端发送一个包含当前所有在线用户的消息。
这样,我们就可以完成一个基本的实时通信网站了。完整的代码如下:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ------------- ----- ---- --- ----- -- - -------------------------------------- ----- -------- ------------- - ----- --------------- ------------------- ------- -- ---- ----------------- - ------------------- -------- -- - ----------------- ------------ ----------- -- -------- --------------------------- -- -- - ---------------------- ----------------------------------- --- ----------------------- -- -- - ----------------- --------------- ----------- --- --- --------------
-- -------------------- ---- ------- --------- ----- ------ ------ -------------------------- ------- ------ --- ------------------- ------- ----------------------------------------------------------------------------------- -------- ----- ------ - ------------- -------------------- -- -- - ---------------------- -- --------- -- -------- ----------------------------- ------- -- - ----- -------- - ------------------------------------ --- ------ ---- -- ------ - ----- -- - ----------------------------- -------------- - ----- ------------------------- - --- --- ----------------------- -- -- - ------------------------- ---- --------- --- ------------------------ ------- -- - ----- -------- - ------------------------------------ ------------------ - ----- --- ------ ---- -- ------ - ----- -- - ----------------------------- -------------- - ----- ------------------------- - --- --------- ------- -------
结语
在这篇教程中,我们介绍了如何使用 Hapijs 和 Socket.io 两个工具库,实现了一个简单的实时通信网站。通过本文,读者可以了解到 Hapijs 和 Socket.io 的基本使用方法,并且熟悉了它们如何协作和提供实时通信服务。如果想深入学习和研究,可以自行测试、学习并发挥自己的想象力,构建更多的功能和应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67972dd5504e4ea9bde37cc5