@sai.na/trpc-message-adapter
v0.1.2
Published
`@sai.na/trpc-message-adapter` 是一个用于通过消息传递实现 [tRPC](https://trpc.io/) 通信的适配器。它提供了灵活的接口,允许用户对接任意使用场景,只需实现数据收发的通道即可。
Readme
@sai.na/trpc-message-adapter
@sai.na/trpc-message-adapter 是一个用于通过消息传递实现 tRPC 通信的适配器。它提供了灵活的接口,允许用户对接任意使用场景,只需实现数据收发的通道即可。
安装
npm install @sai.na/trpc-message-adapter快速开始
以下是一个简单的示例,展示如何使用 @sai.na/trpc-message-adapter 在不同环境中实现通信。
服务端
在服务端,创建一个 tRPC 路由并使用 createMessageHandler 处理消息:
// server.js
import { createMessageHandler } from "@sai.na/trpc-message-adapter";
import { initTRPC } from "@trpc/server";
const t = initTRPC.create();
const router = t.router({
hello: t.procedure.query(() => {
return "Hello from the server!";
}),
});
createMessageHandler({
router,
on: (listener) => {
const handler = (message) => listener(message);
process.on("message", handler);
return () => process.off("message", handler);
},
emit: (message) => {
process.send(message);
},
});客户端
在客户端,创建一个 tRPC 客户端并通过 messageLink 与服务端通信:
// client.js
import { createTRPCClient } from "@trpc/client";
import { messageLink } from "@sai.na/trpc-message-adapter";
const client = createTRPCClient({
links: [
messageLink({
on: (listener) => {
const handler = (message) => listener(message);
process.on("message", handler);
return () => process.off("message", handler);
},
emit: (message) => {
process.send(message);
},
}),
],
});
client.hello
.query()
.then((response) => console.log({ response }))
.catch((error) => console.error({ error }));自定义场景
@sai.na/trpc-message-adapter 的核心是 on 和 emit 方法,用户可以根据自己的需求实现任意数据收发通道。例如,您可以将其用于 WebSocket、PostMessage、或其他通信方式。
对接到
Worker:// file: worker.js import { createMessageHandler } from "@sai.na/trpc-message-adapter"; import { initTRPC } from "@trpc/server"; const t = initTRPC.create(); const router = t.router({ hello: t.procedure.query(() => { return "Hello from the worker!"; }), }); createMessageHandler({ router, on: (listener) => { const handler = (message) => listener(message); self.addEventListener("message", handler); return () => self.removeEventListener("message", handler); }, emit: (message) => { self.postMessage(message); }, }); // file: main.js import { createTRPCClient } from "@trpc/client"; import { messageLink } from "@sai.na/trpc-message-adapter"; const worker = new Worker("worker.js"); const client = createTRPCClient({ links: [ messageLink({ on: (listener) => { const handler = (message) => listener(message); self.addEventListener("message", handler); return () => self.removeEventListener("message", handler); }, emit: (message) => { self.postMessage(message); }, }), ], }); client.hello .query() .then((response) => console.log({ response })) .catch((error) => console.error({ error }));
运行示例
- 创建对应的文件并复制代码。
- 根据您的场景实现
on和emit方法。 - 运行代码,验证通信是否正常。
贡献
欢迎提交 Issue 或 Pull Request 来改进此项目。
License
MIT
