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

JS开发的TCP服务器反脏话过滤器重复触发故障求助

故障根本原因
  • 脏话列表遍历逻辑没有做终止控制:当前代码使用forEach遍历所有敏感词,只要消息命中任意一个敏感词,就会执行一次全量的广播警告、计数、日志逻辑。如果一条消息命中多个敏感词(或者敏感词列表存在包含关系的词,比如同时存在「傻」和「傻逼」,用户发「傻逼」会同时命中两个词),就会触发多次警告逻辑,直接导致重复提示。
  • 状态标识sendable没有起到拦截作用:即使已经命中敏感词将sendable设为false,遍历逻辑仍会继续执行后续敏感词的匹配,只要再次命中仍会重复执行警告逻辑。
修复方案

直接将遍历方式换成支持提前终止的逻辑即可,推荐使用数组some()方法,只要命中第一个敏感词就终止遍历,避免重复执行:

//swear filter
// 优化建议:敏感词列表读取可以放到服务启动阶段执行,不要每次收到消息都读本地文件
let slist = fs.readFileSync("./swearinglist.txt")
let slist_array = slist.toString().split(",");
let sendable = true;

if (active) {
  // 使用some匹配,命中第一个敏感词就终止遍历,不会重复匹配
  const hasSwear = slist_array.some((w) => data.includes(w))
  if (hasSwear) {
    for (var i = 0; i < clients; i++) {
      if (sockets[i] === socket) continue;
      sockets[i].write(socket.remotePort + " Sollte sich erstmal beruhigen !\n")
    };
    mistakes = mistakes + 1;
    console.log(socket.remotePort + " Wollte  | " + data + " |  in den chat schrieben !");
    sendable = false
  }
}

内容的提问来源于stack exchange,提问作者Blockzii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 22:06:04