redis 와 python을 활용한 채팅 프로그램 만들기 ( Pub/Sub 활용 )

2023. 4. 20. 18:54it

반응형

python과 redis를 활용해서 채팅프로그램 만드는 것을 알아보겠다.

기본적인 프로그램이다. 쉽게 따라해보길 바란다.

이 예제에서는 입력받은 채팅 메시지를 Redis의 Pub/Sub 메커니즘으로 발행(Publish)하는 클라이언트이다.

import redis

redis_client = redis.Redis(host='localhost', port=6379, db=0)

1. 구독(Subscribe)하는 클라이언트를 구현한다.

반응형

def publish(channel):
    while True:
        message = input()
        redis_client.publish(channel, message)

위 코드에서는 입력받은 메시지를 redis_client.publish()를 이용하여 Redis의 Pub/Sub 메커니즘으로 채널에 발행(Publish)하고 있다.

2. 다음으로는 메시지를 받아 화면에 출력하는 구독(Subscribe) 클라이언트를 구현한다.

728x90

def subscribe(channel):
    pubsub = redis_client.pubsub()
    pubsub.subscribe(channel)
    for message in pubsub.listen():
        print(message['data'].decode('utf-8'))

위 코드에서는 Redis 클라이언트로 redis_client.pubsub()를 호출하여 Pub/Sub 메커니즘을 사용하도록 설정한다. 그리고 pubsub.subscribe()를 이용하여 해당 채널에 구독(Subscribe)하도록 만들었다. pubsub.listen()으로 메시지를 받아 화면에 출력한다.

3. 이제 마지막으로 해당 코드를 엮는 main 문을 작성한다.

if __name__ == '__main__':
    channel = 'chat_room'
    # 새로운 스레드를 생성하여 발행(Publish) 클라이언트를 실행
    pub_thread = threading.Thread(target=publish, args=(channel,))
    pub_thread.start()

    # 현재 스레드에서 구독(Subscribe) 클라이언트를 실행
    subscribe(channel)

실행을 위해서는 두개의 쓰레드가 필요하다.

하나는 publish() , 다른 하나는 Subscribe() 에 필요한 쓰레드 이다.


이렇게 구현된 예제는 사용자가 채팅 메시지를 입력하면 해당 메시지를 Redis의 Pub/Sub 메커니즘으로 발행(Publish)하고, 다른 클라이언트에서 해당 채널을 구독(Subscribe)하여 받은 메시지를 화면에 출력한다.

반응형