如何在Bun环境下整合Elysia与socket.io构建聊天应用后端?
Bun + Elysia + Socket.IO 协同实现聊天后端解决方案
核心实现(Elysia版本)
首先安装依赖:
bun add elysia socket.io
完整代码示例:
import { Elysia } from "elysia"; import { Server } from "socket.io"; // 初始化Elysia并定义REST路由 const app = new Elysia() .get("/api/health", () => ({ status: "ok" })) .get("/api/messages", () => ["历史消息示例"]) // 可添加更多POST/PUT等REST接口 .listen(3000); // 基于Elysia关联的Bun原生HTTP Server初始化Socket.IO const io = new Server(app.server, { cors: { origin: "http://localhost:5173", // 替换为你的前端地址 methods: ["GET", "POST"] } }); // 实现Socket.IO聊天核心逻辑 io.on("connection", (socket) => { console.log("用户已连接"); // 接收客户端发送的聊天消息并广播给所有用户 socket.on("chat message", (msg) => { io.emit("chat message", msg); }); socket.on("disconnect", () => { console.log("用户已断开连接"); }); }); console.log(`服务运行在 http://localhost:${app.server?.port}`);
关键说明
Elysia调用listen后返回的实例中,app.server就是Bun的原生HTTP Server实例,直接传给Socket.IO构造函数即可实现同端口共享。Socket.IO只会处理自身的路径(默认/socket.io),其余HTTP请求会自动交给Elysia处理,不会出现互相拦截的问题。
备选方案(Hono版本)
如果考虑切换到Hono,实现逻辑类似:
安装依赖:
bun add hono socket.io
完整代码示例:
import { Hono } from "hono"; import { Server } from "socket.io"; import { createBunServer } from "hono/bun"; // 初始化Hono并定义REST路由 const app = new Hono(); app.get("/api/health", (c) => c.json({ status: "ok" })); app.get("/api/messages", (c) => c.json(["历史消息示例"])); // 创建Bun原生HTTP Server const server = createBunServer(app); // 初始化Socket.IO const io = new Server(server, { cors: { origin: "http://localhost:5173", // 替换为你的前端地址 methods: ["GET", "POST"] } }); // 聊天逻辑与Elysia版本一致 io.on("connection", (socket) => { console.log("用户已连接"); socket.on("chat message", (msg) => { io.emit("chat message", msg); }); socket.on("disconnect", () => { console.log("用户已断开连接"); }); }); server.listen({ port: 3000 }, () => { console.log("服务运行在 http://localhost:3000"); });
内容的提问来源于stack exchange,提问作者MrDaves
相关产品推荐
相关产品推荐

