在使用cluster模块时,使用master和worker之间发送消息时,部分中文传递后变成乱码.
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’}