> 백엔드 개발 > 파이썬 튜토리얼 > Python 프록시를 사용하여 확장 가능한 Forex WebSocket 구현

Python 프록시를 사용하여 확장 가능한 Forex WebSocket 구현

Susan Sarandon
풀어 주다: 2025-01-04 18:55:40
원래의
595명이 탐색했습니다.

Implementing a Scalable Forex WebSocket Using a Python Proxy

이 가이드는 Python에서 WebSocket 프록시 서버를 만드는 방법을 알려줍니다.

서버가 수행할 작업은 다음과 같습니다.

  • 클라이언트 신원 확인: 클라이언트 연결을 허용하기 전에 각 클라이언트에 고유한 "사용자 키(API 키)"가 있는지 확인합니다.
  • 다른 WebSocket에 연결: 서버가 별도의 WebSocket 서버에 연결됩니다.
  • 릴레이 메시지: 서버는 연결된 WebSocket에서 메시지를 수신하여 확인된 모든 클라이언트에 보냅니다.

시작하기 전에:

  • Python 3.6 이상 버전을 설치했는지 확인하세요. WebSocket에는 Python 3.6 이상이 필요합니다.
  • WebSockets 라이브러리 설치: 터미널에서 다음 명령을 사용하여 설치할 수 있습니다.
pip install websockets
로그인 후 복사

1. 시작하기

  • 프로젝트를 위한 새 폴더를 만듭니다.
  • 폴더 안에 새 Python 파일을 만들고 이름을 'websocket_proxy_server.py'로 지정합니다. 이 파일에는 서버의 모든 코드가 들어 있습니다.

2. WebSocket 서버 생성

  • 필요한 라이브러리를 가져옵니다. 이전에 설치한 라이브러리가 필요합니다.
  • 서버의 기본 구조를 구축하세요. WebSockets 라이브러리를 사용하여 서버의 기반을 만드세요.
import asyncio
import websockets
import json

class WebSocketProxy:

    def init(self, source_url, symbols):

        self.source_url = source_url
        self.clients = set()
        self.symbols = symbols
        self.valid_user_key = "yourValidUserKey"  # Single valid user key for authentication

    async def on_open(self, ws):

        print("Connected to source")
        symbols_str = ",".join(self.symbols.keys())
        init_message = f"{{"userKey":"your_api_key", "symbol":"{symbols_str}"}}"
        await ws.send(init_message)
로그인 후 복사

3. 클라이언트 연결 및 확인

  • 서버가 클라이언트의 연결을 허용하도록 모두 설정되어 있는지 확인하세요.
  • 각 고객의 신원을 확인하려면 검사를 추가하세요. 클라이언트가 연결을 시도하면 서버는 "사용자 키"를 요청해야 합니다. 올바른 키를 가진 클라이언트만 연결이 허용됩니다.
async def client_handler(self, websocket, path):

        try:

            # Wait for a message that should contain the authentication key
            auth_message = await asyncio.wait_for(websocket.recv(), timeout=10)
            auth_data = json.loads(auth_message)
            user_key = auth_data.get("userKey")

            if user_key == self.valid_user_key:
                self.clients.add(websocket)
                print(f"Client authenticated with key: {user_key}")

                try:
                    await websocket.wait_closed()

                finally:
                    self.clients.remove(websocket)

            else:

                print("Authentication failed")
                await websocket.close(reason="Authentication failed")
        except (asyncio.TimeoutError, json.JSONDecodeError, KeyError):
            print("Failed to authenticate")
            await websocket.close(reason="Failed to authenticate")
로그인 후 복사

4. 소스에 연결하고 메시지 공유

  • 서버를 원래 WebSocket에 계속 연결하는 기능을 만듭니다.
  • 이 기능은 원래 WebSocket에서 받은 메시지를 성공적으로 확인된 모든 클라이언트에 자동으로 보내야 합니다.
async def source_handler(self):
        async with websockets.connect(self.source_url) as websocket:
            await self.on_open(websocket)
            async for message in websocket:
                await self.broadcast(message)

    async def broadcast(self, message):
        if self.clients:
            await asyncio.gather(*(client.send(message) for client in self.clients))
로그인 후 복사

5. 서버 시작

  • 서버를 시작하고 연결을 수신하는 함수를 만듭니다.
  • WebSocket 프록시 서버를 시작하여 이 함수를 실행하는 코드를 추가하세요.
def run(self, host="localhost", port=8765):
        start_server = websockets.serve(self.client_handler, host, port)
        asyncio.get_event_loop().run_until_complete(start_server)
        asyncio.get_event_loop().run_until_complete(self.source_handler())
        asyncio.get_event_loop().run_forever()

if name == "main":
    symbols = {"EURUSD": {}, "GBPUSD": {}, "USDJPY": {}, "AUDUSD": {}, "USDCAD": {}}
    source_url = "ws://example.com/source"
    proxy = WebSocketProxy(source_url, symbols)
    proxy.run()

로그인 후 복사

요약하면

Python 기반 WebSocket 프록시 서버를 성공적으로 개발하셨습니다. 이 서버는 클라이언트 ID를 인증하고, 지정된 데이터 소스에 대한 지속적인 연결을 유지하며, 소스에서 받은 메시지를 확인된 모든 클라이언트에 효과적으로 배포할 수 있습니다. 이 기능은 단일 출처에서 다양한 사용자 기반으로 데이터를 안전하고 즉각적으로 배포해야 하는 애플리케이션에 매우 귀중한 것으로 입증되었습니다.

다음 단계

최적의 성능과 안정성을 보장하려면 철저한 서버 테스트가 중요합니다. 연결 및 메시지 전송이 적절하게 처리되는지 확인합니다. 효율성을 높이려면 로드 밸런싱 메커니즘을 구현하고 연결 헤더를 사용자 지정하는 것이 좋습니다. 마지막으로, 장기간 네트워크 연결을 수용하도록 특별히 설계된 클라우드 서비스 등 프로덕션 배포에 적합한 환경에 서버를 배포하는 것이 좋습니다.

또한 당사 웹사이트에 원래 게시된 튜토리얼인 Python 프록시를 사용하여 Forex WebSocket 확장

도 살펴보시기 바랍니다.

위 내용은 Python 프록시를 사용하여 확장 가능한 Forex WebSocket 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿