在使用cluster模块时,使用master和worker之间发送消息时,部分中文传递后变成乱码.
发布于 11 年前 作者 raytiamocc 3672 次浏览 最后一次编辑是 8 年前
var cluster, masterStart, workerStart, fs;

cluster = require("cluster");
fs = require('fs');

masterStart = function() {
  var worker;
  worker = cluster.fork();
  worker.on("message", function(msg) {
    console.log("get msg: " + msg.length);
    process.exit();
  });
};

workerStart = function() {
  var a;
  a = require("./a.json");
  setTimeout(function() {
    console.log("start send: " + JSON.stringify(a).length);
    process.send(JSON.stringify(a));
  }, 20000);
};

if (cluster.isMaster) {
  masterStart();
} else {
  workerStart();
}

a.json 是一个大json文件,总大小大概4M,里面有挺多中文字符。
传递过去后,发现传递前和传递后的字符串长度不一致,传递前 4195514, 传递后变成了 4195536。
对比后发现,部分中文字符乱码了。使用ultraedit查看乱码部分的十六进制编码为“EF BF BD EF BF BD EF BF BD”。
猜测是中文被截断了,导致解析不了,所以成了未知字符。不知道大家有没有遇到过这种问题。
目前的解决方式是用base64编码一下后再传递,接收到后再解码,就没有问题了。
不知道除此之外有没有什么好的解决办法呢?或者如何能避免这样的问题呢?

1 回复

改参数试试吧

{encoding: ‘binary’}

回到顶部