ホームページ >バックエンド開発 >Python チュートリアル >Python プロキシを使用したスケーラブルな外国為替 WebSocket の実装

Python プロキシを使用したスケーラブルな外国為替 WebSocket の実装

Susan Sarandon
Susan Sarandonオリジナル
2025-01-04 18:55:40594ブラウズ

Implementing a Scalable Forex WebSocket Using a Python Proxy

このガイドでは、Python で WebSocket プロキシ サーバーを作成する方法を説明します。

サーバーが行うことは次のとおりです。

  • クライアント ID の検証: クライアントの接続を許可する前に、それぞれに固有の「ユーザー キー (API キー)」があるかどうかがチェックされます。
  • 別の WebSocket に接続します: サーバーは別の WebSocket サーバーに接続します。
  • リレーメッセージ: サーバーは、接続された WebSocket からメッセージを受信し、検証されたすべてのクライアントに送信します。

始める前に:

  • Python 3.6 以降のバージョンがインストールされていることを確認してください。 WebSocket には Python 3.6 以降が必要です。
  • WebSockets ライブラリをインストールします: ターミナルで次のコマンドを使用してインストールできます。
pip install websockets

1. はじめに

  • プロジェクト用に新しいフォルダーを作成します。
  • フォルダー内に新しい Python ファイルを作成し、「websocket_proxy_server.py」という名前を付けます。このファイルにはサーバーのすべてのコードが含まれます。

2. WebSocketサーバーの作成

  • 必要なライブラリをインポートします。前にインストールしたライブラリが必要になります。
  • サーバーの基本構造を構築します。 WebSocket ライブラリを使用して、サーバーの基盤を作成します。
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 を認証し、指定されたデータ ソースへの永続的な接続を維持し、ソースから受信したメッセージを検証されたすべてのクライアントに効果的に配布できます。この機能は、単一の発信元から多様なユーザー ベースにデータを安全かつ瞬時に配布する必要があるアプリケーションにとって非常に貴重であることがわかります。

次のステップ

最適なパフォーマンスと信頼性を確保するには、徹底的なサーバー テストが不可欠です。接続とメッセージ送信が適切に処理されることを検証します。効率を高めるには、負荷分散メカニズムの実装と接続ヘッダーのカスタマイズを検討してください。最後に、長期間のネットワーク接続に対応するように特別に設計されたクラウド サービスなど、実稼働展開に適した環境にサーバーを展開することをお勧めします。

また、弊社 Web サイトで最初に公開されたチュートリアル: Python プロキシを使用した外国為替 WebSocket のスケーリング

もご覧ください。

以上がPython プロキシを使用したスケーラブルな外国為替 WebSocket の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:atleast_in PyTorch次の記事:atleast_in PyTorch