头图

本文介绍图中绿色方框,Web shop是如何消费backend提供的微服务的。

打开backend-ms repository的miniWebShop.html:

通过这行代码建立和Web Socket服务器的连接:
var socket = io('ws://127.0.0.1:8877');
通过socket.emit API向Web服务器发送一个action,名称为requestFromWebShop, action的负载为oData。

通过socket.on即可接收到后台服务器的处理结果。
这个on后面的action名称需要前端和后台服务器达成一致。


要深入解析这行 JavaScript 代码 var socket = io('ws://127.0.0.1:8877');,我们需从几个方面着手:var 关键字的用途、io 函数及其参数的含义,以及 ws://127.0.0.1:8877 这一部分的作用。通过这些方面的解读,可以全面理解代码的功能和背后的原理。

var 关键字

在 JavaScript 中,var 关键字用于声明变量。尽管 ES6 引入了 letconst 作为更加现代的变量声明方式,var 依然在很多遗留代码中使用。与 letconst 相比,var 声明的变量具有函数作用域(如果在函数内部声明)或者全局作用域(如果在函数外部声明),而不是块作用域。这意味着,使用 var 声明的变量可以在声明它的函数的任何地方被访问,或者如果它没有在函数内部声明,那么就可以在全局环境中访问。

io 函数及其参数

io 函数通常与 Socket.IO 库一起使用。Socket.IO 是一个用于实现实时、双向和基于事件的通信的 JavaScript 库。它不仅可以运行在浏览器中,还能被用在 Node.js 服务器上。io 函数的调用初始化了一个到服务器的 Socket.IO 连接。

var socket = io('ws://127.0.0.1:8877'); 这行代码中,io 函数接受一个参数,即服务器的 URL。通过这个 URL,客户端知道应该连接到哪个服务器以及通过哪个端口进行通信。

ws://127.0.0.1:8877 的含义

ws://127.0.0.1:8877 指定了 WebSocket 服务的地址和端口号。ws:// 是 WebSocket 协议的前缀,类似于 HTTP 的 http:// 和 HTTPS 的 https://127.0.0.1 是一个特殊的 IP 地址,代表本机地址,也就是说,它指向的是当前设备。8877 是服务监听的端口号。

WebSocket 是一种网络通信协议,它提供了全双工通信渠道,这意味着客户端和服务器可以在建立连接后随时相互发送数据,而无需像传统的 HTTP 请求那样,每次通信都需要一个请求和一个响应。Socket.IO 库使用 WebSocket 作为其底层传输机制之一,但如果必要,它也可以回退到较老的长轮询方法以保持兼容性。

通过 io('ws://127.0.0.1:8877') 的调用,我们实际上是在请求与位于 127.0.0.1 的服务器上的 8877 端口建立一个 WebSocket 连接。Socket.IO 会处理实际的连接细节,包括连接的建立、数据的传输以及错误处理等。

Socket.IO 的工作原理

Socket.IO 通过封装 WebSocket 提供了一种高效、可靠的实时通信方式。它自动处理了许多底层细节,如握手、心跳检测、断线重连以及编码和解码消息等。开发者只需关注于发送和接收消息即可。

在客户端和服务器建立连接后,双方可以自由地发送 JSON、二进制文件或者任何想要的数据类型。Socket.IO 通过事件来处理通信,这意味着发送和接收数据都是通过监听和触发事件来实现的。例如,一个聊天应用可能会使用 message 事件来接收新消息。

在实践中的应用

假设你正在开发一个需要实时功能的网页应用,比如一个在线聊天应用或者一个多玩家在线游戏。通过使用 var socket = io('ws://127.0.0.1:8877'); 这样的代码行,你能够在客户端建立起一个与服务器的实时连接。一旦连接建立,你就可以开始实时地发送和接收数据了。

总结起来,这行代码背后的原理和应用展示了 JavaScript 和 Socket.IO 在实时网络通信领域的强大能力。它不仅减少了开发者在网络编程方面的负担,还大大提高了应用的交互性和用户体验。


注销
1k 声望1.6k 粉丝

invalid