python - Redis、Python 通过网络发送消息

标签 python networking redis localhost

我使用 Redis PubSub 消息传递系统用 Python 编写了以下代码。

发布方:

 import redis
 def func1(m):

 queue = redis.StrictRedis(host='localhost', port=6379, db=0)
 channel = queue.pubsub()
 queue.publish("message", m)

 if __name__=='__main__':    
 while True:

     m = raw_input('Enter message: ')
     func1(m)

订阅方:

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
p = r.pubsub()
p.subscribe('message')

while True:
    message = p.get_message()
    if message:
        print  message['data']

我希望能够将消息从一台计算机发送到同一网络上的另一台计算机。我尝试在两台单独的机器上运行发布者和订阅者代码,将 host='localhost' 更改为 host='目标机器的 IP 地址' 但是当我运行它时,订阅者程序只是闲置并且没有收到任何消息。

如何通过网络而不是仅在本地计算机上使用 Redis? 我是否需要在发布端和子端都指定目标机器 IP? 我在网上找不到任何具体示例,我找到的所有内容都假设您在本地主机上运行它。

最佳答案

发布者和消费者都必须连接到同一个 Redis 服务器。

我不熟悉 pubsub 的 .get_message() 方法,但我很确定 .listen() 工作得很好。

您可以使用 MONITOR 命令(例如 redis-cli -h 1.2.3.4 MONITOR,其中 1.2.3.4 是Redis 服务器的地址)。

关于python - Redis、Python 通过网络发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43671492/

相关文章:

python - Kedro 与 MongoDB 和其他文档数据库?

python - 如何有效地将函数应用于数据框中的每一行

c++ - 如何在 C++ 中创建 RAW TCP/IP 数据包?

java - Redis 获取需要时间使用 redisson

ruby-on-rails - rails : Sidekiq unknown driver

azure - 如何在 azure kubernetes 上的 vnet 中配置 Azure redis 缓存?

Python matplotlib 对数自动缩放

python - 在 Django Rest Framework 中序列化字符串而不进行更改?

networking - 网络图中的边缘方向

java - 互联网监听器 Android 示例