如何从节点服务器通知python客户端?

问题描述 投票:1回答:1

我有一个节点进程,当前正在https://company/api/bats_hook/接收POST请求。我想在作业进来时通知python进程。我正在使用node_redis和redis-py,实现如下所示。

当节点进程在本地运行时,下面的代码在本地运行良好,当我将节点端点推送到服务器时,我似乎没有收到事件?

如何从python客户端订阅服务器上的端点?什么东西少了?我确实在服务器https://company/api/bats_hook/

上部署了Redis服务器

javascript

    var redis = require("redis"),
    //redisClient = redis.createClient();
    redisClient = redis.createClient({url: process.env.REDIS_URL});

    app.post("/api/bats_holder", (req, res, next) => {
      console.log(req.query.params)
      console.log(req.body)
      console.log(req.body.name)
      // This publishes a message to the "bats hook channel"
      redisClient.publish("bats hook channel", JSON.stringify({
        params: req.query.params,
        body: req.body,
      }));
      res.status(200).json({
        message: "BATS object",
        posts: req.body
      }); 
    });

python

    import redis

    r = redis.Redis()
    p = r.pubsub()
    p.subscribe('bats hook channel')

    # This blocks and reads any messages from the "bats hook channel" as they come in
    for message in p.listen():
        print(message)
python node.js redis node-redis redis-py
1个回答
0
投票

这是因为您尚未在python脚本中配置Redis URL。这就是为什么它默认在localhost上使用终结点的原因。使用以下命令更新脚本。

import os
import redis

REDIS_URL = os.environ.get('REDIS_URL', 'redis://localhost:6379/0')

r = redis.from_url(REDIS_URL)
p = r.pubsub()
p.subscribe('bats hook channel')

# This blocks and reads any messages from the "bats hook channel" as they come in
for message in p.listen():
    print(message)

documentation中的更多详细信息和示例。

© www.soinside.com 2019 - 2024. All rights reserved.