central.py

This commit is contained in:
Danil Kolesnikov
2025-02-12 23:37:08 +03:00
parent fdf3e8ff93
commit dae81eaebe
3 changed files with 53 additions and 0 deletions

9
central.Dockerfile Normal file
View File

@@ -0,0 +1,9 @@
FROM python:3.8-slim
EXPOSE 80
WORKDIR /app
RUN pip install --no-cache-dir websockets asyncudp
COPY central.py /app/
STOPSIGNAL SIGINT
ENTRYPOINT ["python", "-u", "central.py"]

36
central.py Normal file
View File

@@ -0,0 +1,36 @@
import os
import asyncio
import websockets
import asyncudp
UDP_IP = os.getenv("UDP_IP", "127.0.0.1")
UDP_PORT = int(os.getenv("UDP_PORT", 12345))
async def websocket_handler(websocket):
udp_socket = await asyncudp.create_socket(remote_addr=(UDP_IP, UDP_PORT))
print("Received new connection from", websocket.remote_address)
async def forward_to_websocket(udp_socket, websocket):
while True:
data, addr = await udp_socket.recvfrom()
await websocket.send(data)
task1 = asyncio.create_task(forward_to_websocket(udp_socket, websocket))
try:
async for message in websocket:
udp_socket.sendto(message)
except websockets.exceptions.ConnectionClosed:
pass
finally:
print("Connection to", websocket.remote_address, "is closed")
task1.cancel()
udp_socket.close()
async def main():
async with websockets.serve(websocket_handler, "0.0.0.0", 80):
print("WebSocket server started")
while True:
await asyncio.sleep(3600)
asyncio.run(main())

8
docker-compose.yml Normal file
View File

@@ -0,0 +1,8 @@
services:
ws2udp:
build:
context: .
dockerfile: central.Dockerfile
ports:
- 80:80
restart: always