自荐一个 js 通信的包

226 天前
 xiaoming1992

缘起

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

feature

调用示意


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

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

与 rpc 相比的优势

协议

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

更多信息

详见 @zimi/remote/README.md

2359 次点击
所在节点    JavaScript
14 条回复
humbass
226 天前
看了下不知道怎么用
xiaoming1992
226 天前
@humbass 在这边写使用方法的话内容太多了,估计没人会看完,所以只能简单介绍一下。

使用方法见 [README.md]( https://github.com/xiaomingTang/xiaoming/blob/master/%40zimi/remote/README.md)
codehz
225 天前
感觉 js 间 rpc api 用起来不如 comlink 方便哈哈(
不过要自定义通道还有 jack works 的 async-call-rpc
这些库的优点是注册方法不需要一个个去注册,直接提供一个对象就可以了
xiaoming1992
225 天前
@codehz 我去,跟我写的 remoteValue 好像。我知识面不够广,不知道有这么个东西。。。

不过我的包不限于 webworker ,只要对方能与 js 通信,就能用这个包,简便地调用远端的函数,使用远端的值。
Leon6868
225 天前
支持异步流式回复吗?
Leon6868
225 天前
很神奇,正好在昨天我用 Gemini 搓了一个用途几乎一样的库,用于前端页面通信
xiaoming1992
225 天前
@Leon6868
#5 我会封装调用者的原始数据,所以大概应该不支持流式吧。
#6 叫什么名字?我学习学习
zangbianxuegu
225 天前
没太明白,降低通信成本主要是指什么?对于普通的浏览器-服务端 http 通信
xiaoming1992
225 天前
@zangbianxuegu 普通的浏览器-服务端通信,倒降低不了什么成本,因为浏览器和服务器的通信,一般是单向的,且频率较低,所以成本本来就不高。

这个包的应用场合是,比如你有 main 页面和 iframe 页面,现在需要在 main 页面访问 iframe 中的一些函数,用了这个包,就可以在业务里写出诸如:`await remote._.xxx(anyData)`这样的代码,像使用本地函数一样,使用远端的函数,提高代码可读性,减少格式代码。
forty
215 天前
只能 1 对 1 ,没有广播方法?比如说,1 个调用端,N 个远端,调用端调用 1 次,由第 1 个注册了该接口的远端响应(有的远端未注册则自动忽略),或每个远端都响应,类似的逻辑。
xiaoming1992
214 天前
@forty 目前原则上是不欢迎广播的,只能指定一个 targetId 。但应该可以通过 hack 的方式,把 targetId 当成 groupId 来使用,在 onEmit 函数中针对 groupId 来做群发

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

但是,这样子没法处理群发后的响应,例如,你在业务上把 `1+1` 群发给 5 个远端,结果 3 个远端响应值为 `2`,另外 2 个远端抛错了,那业务上应该返回成功还是失败呢?不好处理。
HongXinss
210 天前
不知道我的理解对不对,和 RPC 异曲同工,和业务通信的模块只要有类似收发的模块,就可以自定义适配器,然后双方之间的调用方式从事件触发模式变成了调用本地方法模式,两端互相暴漏方法,那么另一方就能直接调用,主要提升了可维护性,不需要再通过双方各定义事件和处理逻辑,只需要写好自己的业务并暴漏即可。
xiaoming1992
209 天前
@HongXinss 完全对的,这个包相当于只是提供了一个“从事件触发模式变成了调用本地方法模式”的封装,让业务代码能更方便地通过“调用本地方法模式“调用对方的方法。
HongXinss
208 天前
@xiaoming1992 #13 感谢解惑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1099336

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX