【问题标题】:How to increase performance of redis sub?如何提高redis sub的性能?
【发布时间】:2014-07-31 14:39:08
【问题描述】:

我有这样的代码

var subscribeNewMessages = require("redis").createClient(config.redis.port, config.redis.host);
subscribeNewMessages.subscribe('new-messages');

io.of('/new-messages').on('connection', function (client) {
        subscribeNewMessages.on("message", function(channel, message) {
            var obj = JSON.parse(message);
            if (client.userId == obj.toUserId || client.guestId == obj.toUserId) {
                client.send(message);
            }
            obj = null;
        });
})

我该如何优化它?因为这段代码会为每条新消息解析字符串 json。

当我尝试发布到 redis chanel 时,我需要 JSON.stringify

redis1.publish(channelPrefix, JSON.stringify(clientData));

【问题讨论】:

    标签: node.js redis socket.io node-redis


    【解决方案1】:

    只要您存储 js 对象,就没有办法避免JSON.parse()/JSON.stringify()。您可以使用不同的序列化格式,例如 msgpack,但您仍在调用函数来序列化/反序列化您的数据(JSON.parse()/JSON.stringify() 在节点的性能方面已经很难超越)。

    我认为您可以使用您提供的代码进行的唯一真正的性能调整是只为 所有 客户端而不是每个客户端解析一次 JSON。示例:

    var subscribeNewMessages = require('redis').createClient(config.redis.port, config.redis.host);
    subscribeNewMessages.subscribe('new-messages');
    
    var nsNewMsgs = io.of('/new-messages');
    subscribeNewMessages.on('message', function(channel, message) {
      var obj = JSON.parse(message),
          clients = nsNewMsgs.connected,
          ids = Object.keys(clients);
      for (var i = 0, len = ids.length, client; i < len; ++i) {
        client = clients[ids[i]];
        if (client.userId == obj.toUserId || client.guestId == obj.toUserId)
          client.send(message);
      }
    });
    

    根据您的应用程序,如果您可以在发布的消息中存储 socket.id 值,您甚至可以完全避免 for 循环,然后您可以简单地查找 clients[obj.userSockId]clients[obj.guestSockId],因为 @ 987654321@ 被键入socket.id

    【讨论】:

    • 我改变了它,它变得更好了。但是应用程序仍然以奇怪的方式使用 cpu oi58.tinypic.com/15o9mrd.jpg
    • 您是否将问题隔离到此特定代码,以便您知道它不是其他问题?
    • 请建议工具找出瓶颈。你用它做什么?
    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多