如何使用接收发送的数据通过消息代理 redis 流式传输数据?

问题描述

我正在尝试执行一个节点管理器服务器脚本,我允许多个客户端连接,它通过消息代理以 JSON 格式发送 redis 因为我不需要任何花哨的实现,例如 kafka 或气流,但是如何我如何使用 redis 执行我的发送 - 接收数据?

server.py

import socket

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 8192         # The port used by the server
BUFFER_SIZE = 1

def server_socket():
    data = []
    with socket.socket(socket.AF_INET,socket.soCK_STREAM) as s:
        s.setsockopt(socket.soL_SOCKET,socket.so_REUSEADDR,1)
        s.bind((HOST,PORT))
        s.listen()
        while 1: # Accept connections from multiple clients
            print('Listening for client...')
            conn,addr = s.accept()
            print('Connection address:',addr)
            while 1: # Accept multiple messages from each client
                buffer = conn.recv(BUFFER_SIZE)
                buffer = buffer.decode()
                if buffer == ";":
                    conn.close()
                    print("Received all the data")
                    for x in data:
                        print(x)
                    break
                elif buffer:
                    print("received data: ",buffer)
                    data.append(buffer)
                else:
                    break

server_socket()

客户端.py

import socket
import json

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 8192         # The port used by the server

def json_message(direction):
    local_ip = socket.gethostbyname(socket.gethostname())
    data = {
        'sender': local_ip,'instruction': direction
    }

    json_data = json.dumps(data,sort_keys=False,indent=2)
    print("data %s" % json_data)

    send_message(json_data + ";")

    return json_data



def send_message(data):
    with socket.socket(socket.AF_INET,socket.soCK_STREAM) as s:
        s.connect((HOST,PORT))
        s.sendall(data.encode())
        data = s.recv(1024)

    print('Received',repr(data))

json_message("SOME_DIRECTION")

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)