我正在使用node.js通过json中的套接字进行通信。其中一个操作以base64格式通过套接字发送一个大文件。结果,消息被分成数据包并触发客户端上的各种数据事件。我使用客户端的缓冲区来处理这个问题
var response={
file: fs.readFileSync("FileName","base64")
}
socket.write(JSON.stringify(response));
在客户端,使用缓冲区
cleartextStream.on("data",function(data){
console.log("Received data")
try {
data=JSON.parse(data);
_buffer="";
events.trigger(data.event,data);
}
catch(e){
console.log("Incomplete message received. Building Buffer");
_buffer+=data;
if(/\}$/.test(data) ){//Tests for json boundary
data=JSON.parse(_buffer);
events.trigger(data.event,data);
}
}
这对我来说现在很好。我预料到的唯一问题是,如果在发送文件时,某些其他事件会触发套接字上的写入。
t=0 Start sending file
t=5 Still sending file
t=6 Another event uses socket.write to start sending message
t=7 still sending file
t=8 Another event sending message
这将导致消息乱码。 socket.write在发送单个消息时是否阻塞,或者在传输完成之前是否允许其他方法使用socket.write?