node.js - 是否有通过 Websocket 模拟 Req/Res 的良好标准方法?
问题描述
我正在完全通过 websocket 构建我的应用程序。虽然我看到能够向客户端发送数据而无需客户端向我请求数据的好处。req/res 类型的交互仍然有好处,因为您可以将所有逻辑放在一起。
前任:
进行注册。您发送数据,如果出现问题,服务器会发送 OK 或 ERROR。就在那里,它是三个事件!DataFromClient、RegistrationFailed、RegistrationSuccess。但是使用 REST,我可以发出一个 POST 请求并在一个函数中处理 if else。
创建一个允许您推送通知 + Req/Res 类型交互的库应该不会太难。如果可以像快速路线一样定义路线,那就更好了。
解决方案
没有使用 webSocket 实现请求/响应的“标准”方式。它不是 webSocket 标准的一部分。它当然可以完成(下面会详细介绍),但是没有“标准”的方式来做到这一点。
建立在 webSocket 之上的 socket.io 库在它发送的任何消息中都内置了一个响应选项。
发件人做这样的事情:
socket.emit("msgName", someData, function(data) {
// data is the "response" to sending this message
console.log(data);
});
期望响应的消息的接收者执行以下操作以导致响应被发送:
socket.on("msgName", (someData, fn) => {
// send response
fn(someOtherData);
});
您可以在 webSocket 中实现自己的响应方案。您必须为每个请求添加一个 uniqueID 到您的数据格式,这样您就可以在响应中发回相同的 uniqueID,以便接收者知道哪个响应属于哪个请求。
推荐阅读
- ios - iOS 模拟器在麦克风权限请求时崩溃
- html - 将动画社交媒体图标的笔改编成产品
- function - 我可以定义一个最大值函数 f(x) 分配给参数 x
- spring - Spring boot maven插件:包含测试资源
- docker - 如何使 traefik 自动分配给同一图像中的一个前端 docker 后端?
- r - 当这些数据帧不等长时,如何匹配两个数据帧之间的奇异值?
- java - 在activityforresult android 8中打开文件的路径文件
- android - 如何用按钮替换文本视图?
- bash - 用于填充 sqlite 表的 Bash 脚本未按预期工作
- jenkins - GCP windows VM 将突然停止允许连接