node.js - 在 node.js 中,如何识别缓冲区是二进制还是文本?

标签 node.js redis

下面是一段在node.js中实现redis pubsub的代码。我在读取一个文件和一个纯文本后发布了一个二进制数据,有没有办法识别消息接收到的缓冲区是二进制还是文本?

var redis = require("redis"),
    pub = redis.createClient(null, null, {
        detect_buffers: true
    }),
    sub = redis.createClient(null, null, {
        detect_buffers: true
    }),
    fs = require("fs");

sub.subscribe("abc");

sub.on("subscribe", function(channel, count) {
    fs.readFile("IMG_2693.JPG", function(err, data) {
        pub.publish("abc", data);
    });
    pub.publish("abc", "hello");

});

sub.on("message", function(channel, data) {
    // Can I identify if it is binary data or text?
    console.dir(data);
});

谢谢!

最佳答案

Redis 与数据编码无关。它不关心数据是二进制还是文本,并且不能将此信息返回或转发给客户端。

我认为处理此问题的经典方法是向包含元信息(几个字节)的负载添加 header 。例如,您还可以存储数据类型、了解有效载荷是否被压缩的指示符等......

关于node.js - 在 node.js 中,如何识别缓冲区是二进制还是文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12808508/

相关文章:

node.js - 无法使用 ejs 模板在 View 中显示 Flash 消息

node.js - Redis 在一个命令中获取 TTL 和键的值 - nodejs redis

lua - 在redis中加载lua脚本文件

Redis 禁用持久化

json - node-redis 错误 : Deprecated: The SET command contains a argument of type Object

testing - Node.js 测试 RESTful API(vows.js?)

javascript - NodeJs,同步开发模式

Node.js 中带有相对路径的 java 命令

javascript - 覆盖 node.js 中其他模块中的函数

python - 如何按任务名称检查和取消 Celery 任务