Skip to content

xushengfeng/node-unix-socket

Repository files navigation

myde-unix-socket

高性能的 Node.js Unix socket 库,使用 Rust (Neon) 实现,支持文件描述符传递 (SCM_RIGHTS)。

特性

  • 🚀 高性能 - 使用 Rust 实现,基于 poll 事件循环
  • 📁 文件描述符传递 - 支持通过 Unix socket 传递文件描述符 (SCM_RIGHTS)
  • 🔍 对方pid获取 - 读取连接对方的 pid,在确认身份时非常有用
  • 📡 事件驱动 - 基于 data 事件接收数据
  • 🏗 TypeScript - 完整的类型定义
  • 📦 开箱即用 - 无需编译/重编译,自带 Linux 兼容二进制

安装

pnpm add myde-unix-socket

快速开始

服务器

import { UServer, USocket } from "myde-unix-socket";

const server = new UServer();
server.listen("/tmp/my-socket");

server.on("connection", (socket) => {
    socket.on("data", (data: Buffer, fds: number[]) => {
        console.log("Received:", data.toString());
    });

    socket.write(Buffer.from("Hello!"));
});

server.resume(); // 开始接受连接

客户端

import { USocket } from "myde-unix-socket";

const client = new USocket("/tmp/my-socket");

client.on("data", (data: Buffer, fds: number[]) => {
    console.log("Received:", data.toString());
});

client.on("connect", () => {
    client.write(Buffer.from("Hello Server!"));
});

事件驱动接收数据

const server = new UServer();
server.listen("/tmp/test");
server.resume();

server.on("connection", (socket) => {
    socket.on("data", (data: Buffer, fds: number[]) => {
        console.log("Data:", data.toString());
        console.log("FDs:", fds);
    });
});

const client = new USocket("/tmp/test");
client.write(Buffer.from("message1"));
client.write(Buffer.from("message2"));

文件描述符传递

import * as fs from "fs";

// 服务器
server.on("connection", (socket) => {
    socket.on("data", (data, fds) => {
        if (fds.length > 0) {
            const content = fs.readFileSync(fds[0], "utf-8");
            console.log(content);
            fs.closeSync(fds[0]);
        }
    });
});

// 客户端
const fd = fs.openSync("/tmp/file.txt", "r");
client.write({ data: Buffer.from("fd"), fds: [fd] });
fs.closeSync(fd);

构建

pnpm install
pnpm run build
pnpm test

脚本:

  • pnpm run build - 完整构建
  • pnpm run build:rust - 构建 Rust 模块
  • pnpm run build:ts - 构建 TypeScript
  • pnpm test - 运行测试
  • pnpm run test:rust - 运行 Rust 测试

技术栈

  • Rust + nix - Unix socket 实现
  • Neon - Rust/Node.js 桥接
  • Vite - 打包
  • Vitest - 测试

相关项目

usocket 参考

About

nodejs unix socket support scm_rights(fd transfer)

Resources

License

Stars

Watchers

Forks

Contributors