Skip to content
Snippets Groups Projects
Commit 3a65d819 authored by 천 진강's avatar 천 진강
Browse files

feat(bridge): 브릿지 서버 작성

parent c708c546
Branches
No related tags found
No related merge requests found
import asyncio
import websockets
# 스프링 서버 => c 서버
async def receive_messages(websocket, writer):
try:
while True:
# 웹소켓 메세지 송신
message = await websocket.recv()
# 소켓으로 전달
writer.write(message.encode())
await writer.drain()
print(f"Received from spring server : {message}")
except websockets.ConnectionClosed:
print("Spring server close")
# c 서버 => 스프링 서버
async def send_messages(websocket, initial_message, reader):
try:
await websocket.send(initial_message)
while True:
# 소켓 메세지 송신
data = await reader.read(1024)
if not data:
break
message = data.decode().strip()
print(f"Received from client : {message}")
# 웹소켓으로 전달
await websocket.send(message)
except websockets.ConnectionClosed:
print("Spring server close")
# 연결 관리
async def handle_client(reader, writer):
addr = writer.get_extra_info('peername')
print(f"{addr} accepted")
try:
while True:
# C 서버 메세지 read
data = await reader.read(1024)
if not data:
print(f"{addr} disconnected")
break
initial_message = data.decode().strip()
print(f"Received from client : {initial_message}")
uri = "ws://localhost:8080/ws/charger"
# spring 서버 웹소켓으로 연결 후 초기 메세지 전송
try:
async with websockets.connect(uri) as websocket:
send_thread = asyncio.create_task(send_messages(websocket, initial_message, reader))
receive_thread = asyncio.create_task(receive_messages(websocket, writer))
await asyncio.gather(send_thread, receive_thread, return_exceptions=True)
# 서버 종료 처리
except websockets.ConnectionClosed:
print("Spring server disconneted")
# 그외 예외 처리
except Exception as e:
print(f"Spring server connect error {e}")
break
# c 서버 종료
except asyncio.CancelledError:
print(f"{addr} client disconnected")
# 자원 반환
finally:
print(f"{addr} client session close")
writer.close()
await writer.wait_closed()
async def main():
host = '127.0.0.1'
port = 49152
# 파이썬 Bridge 서버 실행
server = await asyncio.start_server(handle_client, host, port)
print(f"Bridge Server Start {host}:{port}")
async with server:
await server.serve_forever()
asyncio.run(main())
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment