惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
T
Threat Research - Cisco Blogs
N
News and Events Feed by Topic
Hacker News: Ask HN
Hacker News: Ask HN
Project Zero
Project Zero
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 叶小钗
Security Latest
Security Latest
Spread Privacy
Spread Privacy
aimingoo的专栏
aimingoo的专栏
N
News and Events Feed by Topic
Webroot Blog
Webroot Blog
U
Unit 42
Cyberwarzone
Cyberwarzone
小众软件
小众软件
Scott Helme
Scott Helme
Engineering at Meta
Engineering at Meta
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
爱范儿
爱范儿
S
Schneier on Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Schneier on Security
Schneier on Security
Latest news
Latest news
GbyAI
GbyAI
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
The Register - Security
The Register - Security
WordPress大学
WordPress大学
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
PCI Perspectives
PCI Perspectives
Jina AI
Jina AI
AI
AI
NISL@THU
NISL@THU
I
Intezer
G
GRAHAM CLULEY
B
Blog
S
Secure Thoughts
IT之家
IT之家
宝玉的分享
宝玉的分享
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
有赞技术团队
有赞技术团队
V2EX - 技术
V2EX - 技术
Recorded Future
Recorded Future
Hacker News - Newest:
Hacker News - Newest: "LLM"

JavaScript

发现国内很多文章对宏任务和微任务的解释都是有问题的 - V2EX 智能香氛机小程序外包合作招募 - V2EX 分享一道 Node.js 的面试题,考察 JS 相关的最基本的掌握程度,代码完全来自官方文档 你们 js 用过双等号吗 - V2EX 有人大量建立技术文档的.cn 中文站点,并将站内 js 链接指向 cdn.jsdelivr.net.cn - V2EX 发现了两个关于 JavaScript 语言好玩的网站,让人血压升高 js 判空值 最佳实践 - V2EX 简单的图像算法为什么 AI 搞不定呢 Capacitor.JS 如何自动化最后一步流程 JSON.parse 转数字精度丢失问题 有没有前端大佬,帮我看一下这个网站底部的粒子动画怎么做的。 - V2EX 这段前端代码存在并发读取竞态的问题吗? nstr - number → string, but looks good 前端 js 播放 base64 编码的 mp3,放出来杂音很大,请教是哪里出错了? 熟悉工业计算的来,是阀门相关的企业 js 不使用 promise 完成一个 sleep 函数,必须支持 await 调用 - V2EX 小米手机澎湃系统 AutoJS 的悬浮窗在证券软件打开时就消失 - V2EX 关于 js 复制粘贴问题 求助,无法在 wixsite.com 上使用 document.write threejs 官方文档看着好难受。 - V2EX 有没有 AI 能一步一步教会伸手党如何使用业务系统? 也聊下自己最近用 copilot 写程序的心得,还要讨教下方案 javascript 继续 套壳 AI 应用类 manus 如何在移动端 h5 页面实现<Select/>搜索下拉选择框! - V2EX 求前端高频数据绘图库 - V2EX 吐槽一下 Trae 记忆中好像在论坛看到有款专门在 iframe 中做前端的 js 库/框架? - V2EX JavaScript 中的 Promise 跟异步有关系吗?还是我的理解有问题?谁能把 Promise 解释清楚? Promise 的正确用法应该是什么样的? - V2EX 求问,小程序的菜单栏怎么和右边的功能键垂直居中? - V2EX 自习室小程序的座位图是如何实现的(前端) - V2EX 谷歌浏览器的 bug - V2EX 为什么中小公司的前端面试官爱问 array 和 object 有多少种方法 - V2EX 有什么办法能实现 uniapp 上的离线人脸识别 本人遇到了非常奇怪的关于“注释”ctrl+/ 快捷键问题,需要大佬们指点一二。 ChatGPT 语音对话技术 求前端大佬解惑, HTML 里的文本怎么做逐行滚动? 快应用问题求助 2024 JS 生态调查结果出炉: React 遥遥领先, Vue 程序员最穷 不顾“万人联名请愿”,甲骨文拒绝放弃 JavaScript 商标所有权 2025 年,我又把前端"老古董"--AMD 给翻了出来 有使用 javascript 编写 windows cmd 批处理程序的方法吗,类似 coffescript 这样转译的东西 js 小白,请教一下为什么网页上的播放器, Chrome 控制台不能用 querySelector 直接获取到呢 Python 代码转换为 Javascript 运算结果不一致 css 的 justify-content 等效语法? 请教一下使用油猴脚本修改 html 内容后, 样式不生效的问题 async 函数中止/task local 方案后记,V8 上的另一个可行思路 如何在前端统计用户观看视频所消耗的流量?求教啊,大神们! pdfjs 中,通过 findController 可以搜索到对应的文本信息,并且高亮出来。那么, pdfjs 有没有什么 api 可以获取搜索到的信息的位置节点 ?请教 有没有独立的同时可以 pc 移动端用的三级联动城市选择组件啊 - V2EX 字幕滚动有没有更好的方式实现
自荐一个 js 通信的包
xiaoming1992 · 2024-12-21 · via JavaScript

这是一个创建于 539 天前的主题,其中的信息可能已经有所发展或是发生改变。

缘起

我的工作内容有写网页游戏,游戏涉及到前后端通信,没找到顺手的通信包,所以手写了一个通用的 js 通信包remote

feature

  • 本地可以是浏览器、服务器,甚至一些受限的 js 子集
  • 远端可以是任何终端,如 iframe / Java 服务器 等
    • 只要远端能跟 js 通信,就能使用该包
  • 对远端响应的数据格式也不严格限制(可以集中解析)
  • 已在公司游戏前后端通信中应用,极大地降低了通信成本(简化调用)
  • ts 类型严格

调用示意


// 远端
remote.register('something', async (params: Whatever) => {
  return WhatYouWant
})

// 本地
// res === WhatYouWant
const res = await remote._.something(xxx)

与 rpc 相比的优势

  • 不局限于与服务端的通信,无论对方是任何端,只要能与 js 通信,就能使用该包;
  • 相互通信,不存在“主从”的概念,通信双方是平等的;
  • 类型严格;
  • 包较底层,对项目整体的侵入较小,几乎不限制对方的响应的数据格式(因为可以自由解析对方的响应,即自由 emit );

协议

由于通信双方是平等的,所以 B 调用 A 的流程也是一样的

protocol.png

更多信息

详见 @zimi/remote/README.md

  • JS
  • 通信
  • 远程

    14 条回复    2025-01-09 08:44:26 +08:00

    humbass

    1

    humbass      2024 年 12 月 21 日

    看了下不知道怎么用

    codehz

    3

    codehz      2024 年 12 月 22 日

    感觉 js 间 rpc api 用起来不如 comlink 方便哈哈(
    不过要自定义通道还有 jack works 的 async-call-rpc
    这些库的优点是注册方法不需要一个个去注册,直接提供一个对象就可以了

    xiaoming1992

    4

    xiaoming1992      2024 年 12 月 22 日 via Android

    @codehz 我去,跟我写的 remoteValue 好像。我知识面不够广,不知道有这么个东西。。。

    不过我的包不限于 webworker ,只要对方能与 js 通信,就能用这个包,简便地调用远端的函数,使用远端的值。

    Leon6868

    5

    Leon6868      2024 年 12 月 23 日

    支持异步流式回复吗?

    Leon6868

    6

    Leon6868      2024 年 12 月 23 日

    很神奇,正好在昨天我用 Gemini 搓了一个用途几乎一样的库,用于前端页面通信

    xiaoming1992

    7

    xiaoming1992      2024 年 12 月 23 日 via Android

    @Leon6868
    #5 我会封装调用者的原始数据,所以大概应该不支持流式吧。
    #6 叫什么名字?我学习学习

    zangbianxuegu

    8

    zangbianxuegu      2024 年 12 月 23 日

    没太明白,降低通信成本主要是指什么?对于普通的浏览器-服务端 http 通信

    xiaoming1992

    9

    xiaoming1992      2024 年 12 月 23 日 via Android   ❤️ 1

    @zangbianxuegu 普通的浏览器-服务端通信,倒降低不了什么成本,因为浏览器和服务器的通信,一般是单向的,且频率较低,所以成本本来就不高。

    这个包的应用场合是,比如你有 main 页面和 iframe 页面,现在需要在 main 页面访问 iframe 中的一些函数,用了这个包,就可以在业务里写出诸如:`await remote._.xxx(anyData)`这样的代码,像使用本地函数一样,使用远端的函数,提高代码可读性,减少格式代码。

    forty

    10

    forty      2025 年 1 月 2 日

    只能 1 对 1 ,没有广播方法?比如说,1 个调用端,N 个远端,调用端调用 1 次,由第 1 个注册了该接口的远端响应(有的远端未注册则自动忽略),或每个远端都响应,类似的逻辑。

    xiaoming1992

    11

    xiaoming1992      2025 年 1 月 2 日

    @forty 目前原则上是不欢迎广播的,只能指定一个 targetId 。但应该可以通过 hack 的方式,把 targetId 当成 groupId 来使用,在 onEmit 函数中针对 groupId 来做群发

    这个库是比较底层的,你在业务上可以声明发送给哪个 id ,至于针对这个 id ,如何发送、实际发送给谁,是你自己在 onEmit 函数中自定义的,所以应该是可以实现的

    但是,这样子没法处理群发后的响应,例如,你在业务上把 `1+1` 群发给 5 个远端,结果 3 个远端响应值为 `2`,另外 2 个远端抛错了,那业务上应该返回成功还是失败呢?不好处理。

    eWS2mq278TTzoj0O

    12

    eWS2mq278TTzoj0O      2025 年 1 月 7 日

    不知道我的理解对不对,和 RPC 异曲同工,和业务通信的模块只要有类似收发的模块,就可以自定义适配器,然后双方之间的调用方式从事件触发模式变成了调用本地方法模式,两端互相暴漏方法,那么另一方就能直接调用,主要提升了可维护性,不需要再通过双方各定义事件和处理逻辑,只需要写好自己的业务并暴漏即可。

    xiaoming1992

    13

    xiaoming1992      2025 年 1 月 8 日   ❤️ 1

    @HongXinss 完全对的,这个包相当于只是提供了一个“从事件触发模式变成了调用本地方法模式”的封装,让业务代码能更方便地通过“调用本地方法模式“调用对方的方法。