KOI 后台新的架构下,webshop如何消费后台服务 - websocket 初始化

简介: KOI 后台新的架构下,webshop如何消费后台服务 - websocket 初始化

本文介绍图中绿色方框,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。

545c85b94220f8194ef9e752893faf8f_format,png.png

通过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 在实时网络通信领域的强大能力。它不仅减少了开发者在网络编程方面的负担,还大大提高了应用的交互性和用户体验。

相关文章
|
6天前
|
Cloud Native Java API
聊聊从单体到微服务架构服务演化过程
本文介绍了从单体应用到微服务再到云原生架构的演进过程。单体应用虽易于搭建和部署,但难以局部更新;面向服务架构(SOA)通过模块化和服务总线提升了组件复用性和分布式部署能力;微服务则进一步实现了服务的独立开发与部署,提高了灵活性;云原生架构则利用容器化、微服务和自动化工具,实现了应用在动态环境中的弹性扩展与高效管理。这一演进体现了软件架构向着更灵活、更高效的方向发展。
|
15天前
|
存储 Linux KVM
Proxmox VE (PVE) 主要架构和重要服务介绍
Proxmox VE (PVE) 是一款开源的虚拟化平台,它基于 KVM (Kernel-based Virtual Machine) 和 LXC (Linux Containers) 技术,支持虚拟机和容器的运行。PVE 还提供高可用集群管理、软件定义存储、备份和恢复以及网络管理等企业级功能。
248 7
|
5天前
|
运维 负载均衡 安全
深度解析:Python Web前后端分离架构中WebSocket的选型与实现策略
深度解析:Python Web前后端分离架构中WebSocket的选型与实现策略
27 0
|
6天前
|
安全 数据安全/隐私保护 UED
优化用户体验:前后端分离架构下Python WebSocket实时通信的性能考量
在当今互联网技术的迅猛发展中,前后端分离架构已然成为主流趋势,它不仅提升了开发效率,也优化了用户体验。然而,在这种架构模式下,如何实现高效的实时通信,特别是利用WebSocket协议,成为了提升用户体验的关键。本文将探讨在前后端分离架构中,使用Python进行WebSocket实时通信时的性能考量,以及与传统轮询方式的比较。
24 2
|
18天前
|
消息中间件 Kafka 数据库
微服务架构中,如何确保服务之间的数据一致性
微服务架构中,如何确保服务之间的数据一致性
|
1月前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
28 5
|
1月前
|
XML Java 数据库
在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂
【9月更文挑战第8天】在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂。日志作为系统行为的第一手资料,传统记录方式因缺乏全局视角而难以满足跨服务追踪需求。本文通过一个电商系统的案例,介绍如何在Spring Boot应用中手动实现日志链路追踪,提升调试效率。我们生成并传递唯一追踪ID,确保日志记录包含该ID,即使日志分散也能串联。示例代码展示了使用过滤器设置追踪ID,并在日志记录及配置中自动包含该ID。这种方法不仅简化了问题定位,还具有良好的扩展性,适用于各种基于Spring Boot的微服务架构。
37 3
|
19天前
|
编解码 Linux 开发工具
Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明
支持x64_64架构、aarch64架构(需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc++.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9)。
|
2月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
45 2
|
2月前
|
消息中间件 Java 数据库
解密 Java 后台架构设计之道
解密 Java 后台架构设计之道
55 2