2024.10.15 - [데이터&AI/기타개발] - [realtime GPT를 쓰기위한 사전학습] threading의 이해 (python의 멀티태스킹!)
2024.10.20 - [데이터&AI/LLM] - [realtime GPT를 쓰기위한 사전학습]pyaudio이해하기① (마이크 음성을 데이터로 전환!!!)
Python 기반의 realtime GPT를 사용하기 위해! 여러가지를 알아보고있는데요!!
오늘은 마지막! web socket 방식의 통신방식을 알아보겠습니다!
기존에, 우리는 API를 통해 데이터를 주고받는 http connection에 익숙했었습니다.
GPT에 응답을 받는것도 마찬가지로 API로 request하고 답변을 받는것이었지요!
이 방식은 코드도 간편하고 좋지만!!
실시간 양방향통신이 안된다는 치명적인 단점이있었습니다!!
(사용자가 API 요청시에만 답을 받고 그 외에는 답을 못받음)
반면!! Web socket 방식의 TCP 프로토콜은!
지속적인 연결을 유지하여 클라이언트와 서버가 양방향으로 데이터를 실시간으로 주고받을 수 있습니다.
그럼!! 실제 코드로 이해해볼까요!??
1. socket 의 서버측!!
-python에서 api를 띄어두려먼 fastapi 나 flask를 사용하지요!?
- 비슷합니다!! socket으로 로컬호스트 1234 포트에 프로세스를 띄어두어보겠습니다!!
import socket
# 서버 소켓 설정
HOST = '127.0.0.1' # 로컬호스트
PORT = 1234 # 사용할 포트 번호
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
# 서버 소켓 바인딩 및 리스닝
server_socket.bind((HOST, PORT))
server_socket.listen()
print(f"서버가 {HOST}:{PORT}에서 대기 중입니다...")
# 클라이언트 연결 수락
client_socket, client_address = server_socket.accept()
with client_socket:
print(f"클라이언트 {client_address}가 연결되었습니다.")
while True:
# 클라이언트로부터 메시지 수신
data = client_socket.recv(1024)
if not data:
break # 클라이언트가 연결을 종료하면 루프 종료
print(f"수신된 메시지: {data.decode()}")
# 클라이언트에게 응답 전송
client_socket.sendall(b"server checked")
그럼!! 아래와 같이 코드가 실행되며 1234 포트에서 프로세스가 대기중이게 됩니다!
2. socket 의 client 측!!
- 이번엔 다른 파일에서 client 관점에서 1234 포트에 붙어보겠습니다!!
- 아래 코드를 봐주세요!!
import socket
# 클라이언트 소켓 설정
HOST = '127.0.0.1' # 서버 IP (로컬호스트)
PORT = 1234 # 서버가 열어둔 포트 번호
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 서버에 연결
client_socket.connect((HOST, PORT))
# 서버로 메시지 전송
message = "안녕하세요, 서버님!"
client_socket.sendall(message.encode())
# 서버로부터 응답 수신
data = client_socket.recv(1024)
print(f"서버로부터 수신된 메시지: {data.decode()}")
약속된 ,IP 및 포트를 통하여 "안녕하세요 서버님" 이라는 메세지를 보내게됩니다!!
그럼!! 아래 이미지와 같이 메세지가 잘 가고 서버로부터 받았다는 메세지를 받지요!
또 보내볼까요!?
# 서버로 메시지 전송
message = "안녕하세요, 서버님! 두번쨰 발송입니다!"
client_socket.sendall(message.encode())
# 서버로부터 응답 수신
data = client_socket.recv(1024)
print(f"서버로부터 수신된 메시지: {data.decode()}")
이번에도 역시 잘 받았다고 답변이오네요!!
3. socket 의 서버 측!! 최종확인
- 그럼 처음 1에서 실행해두었던 서버측에 데이터가 잘 도착했을까요!?
짠!! 위와 같이 클라이언트로 부터 보낸 메세지가 잘 도착했음을 알 수 있습니다!!
4. socket 의 서버-클라이언트 통신 종료!!
- 이제 ,client 측에서 통신을 끊어보곘습니다!!
client_socket.close()
그럼 이후로는 데이터를 보낼 수 없는것을 알수 있습니다!
간단하지요!!
앞으로는 이와 같은 방식으로 openAI의 서버와 통신하며 답변을 받아볼 수 있도록 하겠습니다!!
'데이터&AI > 기타개발' 카테고리의 다른 글
[realtime GPT를 쓰기위한 사전학습]pyaudio이해하기② (데이터를 소리로 전환!!!) (2) | 2024.10.23 |
---|---|
[realtime GPT를 쓰기위한 사전학습] queue 의 이해 (python. 줄을 서시오!! FIFO) (2) | 2024.10.18 |
[realtime GPT를 쓰기위한 사전학습] threading의 이해 (python의 멀티태스킹!) (1) | 2024.10.17 |
Python으로 주말 or 공휴일 체크하는 로직 만들기 (with 공공 API) (0) | 2024.10.14 |
[Deepvoice] 내 목소리를 학습, 파일을 생성해보자!! (클릭만하면됨) (2) | 2024.09.05 |
댓글