You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript + Fastify WebSocket服务器无法响应客户端消息问题求助

TypeScript + Fastify WebSocket服务器无法响应客户端消息问题求助

各位大佬好!我最近在用TypeScript、Node.js和Fastify搭建一个WebSocket服务器,现在客户端能成功建立连接,但不管我发什么消息,服务器都完全没反应,有没有人能帮我排查下问题出在哪呀?

我的当前配置

服务器代码(index.mts):

(注:之前粘贴代码时没贴全,我把大概结构和可能写错的地方整理出来了)

"use strict";

import fastify from "fastify";
import fastifyWebsocket from "@fastify/websocket";
import { FastifyRequest } from "fastify";

const fastifyInstance = fastify({ logger: true });

// 注册了WebSocket插件
fastifyInstance.register(fastifyWebsocket);

// 我原来写的路由(大概率是这里出问题了)
fastifyInstance.get('/ws', async (request, reply) => {
  // 当时完全没写消息处理的逻辑...
});

// 启动服务器的代码
const start = async () => {
  try {
    await fastifyInstance.listen({ port: 3000 });
    console.log('服务器跑在http://localhost:3000啦');
  } catch (err) {
    fastifyInstance.log.error(err);
    process.exit(1);
  }
};

start();

我自己踩坑后总结的可能问题点,也给同遭遇的朋友参考:

  • 路由未启用WebSocket模式:一定要在路由选项里加{ websocket: true }!不然Fastify根本不会把这个路由当成WebSocket端点处理,自然收不到任何消息。
  • 未监听message事件:连接建立后,必须给connection.socket绑定message事件才能接收客户端发送的消息,我之前就是漏了这关键一步,服务器当然没反应。
  • 消息处理逻辑有隐藏bug:比如处理消息时抛出了未捕获的异常,导致后续代码无法执行,可以在回调里加个try/catch排查是否有报错。
  • 客户端发送格式不匹配:要确认客户端发的是文本还是二进制消息,服务器得对应解析,比如文本消息要用message.toString()转成可读格式。

修复后的服务器路由示例代码

后来我调整了路由写法,现在能正常响应消息了,给大家贴出来参考:

// 正确的WebSocket路由配置
fastifyInstance.get('/ws', { websocket: true }, (connection, request) => {
  // 监听客户端发送的消息
  connection.socket.on('message', (message) => {
    const receivedMsg = message.toString();
    console.log(`收到客户端消息:${receivedMsg}`);
    // 给客户端回复消息
    connection.socket.send(`服务器收到啦:${receivedMsg}`);
  });

  // 监听连接断开事件
  connection.socket.on('close', () => {
    console.log('客户端断开连接了');
  });
});

测试用的客户端代码

如果需要验证服务器功能,用这段简单的前端代码就能测试:

const socket = new WebSocket('ws://localhost:3000/ws');

socket.onopen = () => {
  console.log('成功连上服务器!');
  socket.send('Hello 服务器~');
};

socket.onmessage = (event) => {
  console.log(`服务器回复:${event.data}`);
};

socket.onclose = () => {
  console.log('和服务器断开连接了');
};

备注:内容来源于stack exchange,提问作者ogura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:13:19