Rumah > pembangunan bahagian belakang > Tutorial Python > Melaksanakan WebSocket Forex Berskala Menggunakan Proksi Python

Melaksanakan WebSocket Forex Berskala Menggunakan Proksi Python

Susan Sarandon
Lepaskan: 2025-01-04 18:55:40
asal
563 orang telah melayarinya

Implementing a Scalable Forex WebSocket Using a Python Proxy

Panduan ini akan mengajar anda cara membuat pelayan proksi WebSocket dalam Python.

Inilah yang akan dilakukan oleh pelayan:

  • Sahkan identiti pelanggan: Sebelum membenarkan pelanggan menyambung, ia akan menyemak sama ada setiap satu mempunyai "kunci pengguna (Kunci API)" yang unik.
  • Sambung ke WebSocket lain: Pelayan akan menyambung ke pelayan WebSocket yang berasingan.
  • Mesej relay: Pelayan akan menerima mesej daripada WebSocket yang disambungkan dan menghantarnya kepada semua pelanggan yang disahkan.

Sebelum anda memulakan:

  • Pastikan anda telah memasang Python 3.6 atau versi yang lebih baharu. WebSockets memerlukan Python 3.6 atau lebih tinggi.
  • Pasang pustaka WebSockets: Anda boleh memasangnya menggunakan arahan berikut dalam terminal anda.
pip install websockets
Salin selepas log masuk

1. Bermula

  • Buat folder baharu untuk projek anda.
  • Buat fail Python baharu di dalam folder dan namakannya 'websocket_proxy_server.py.' Fail ini akan menyimpan semua kod untuk pelayan anda.

2. Cipta Pelayan WebSocket

  • Import perpustakaan yang diperlukan. Anda memerlukan perpustakaan yang anda pasang sebelum ini.
  • Bina struktur asas pelayan anda. Gunakan perpustakaan WebSockets untuk mencipta asas untuk pelayan anda.
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)
Salin selepas log masuk

3. Sambung dan Sahkan Pelanggan

  • Pastikan pelayan sudah bersedia untuk menerima sambungan daripada pelanggan.
  • Tambahkan cek untuk mengesahkan identiti setiap pelanggan. Semasa pelanggan cuba menyambung, pelayan harus meminta "kunci pengguna." Hanya pelanggan dengan kunci yang betul akan dibenarkan untuk menyambung.
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")
Salin selepas log masuk

4. Sambung ke Sumber dan Kongsi Mesej

  • Buat fungsi yang memastikan pelayan disambungkan ke WebSocket asal.
  • Fungsi ini harus menghantar mesej yang diterima secara automatik daripada WebSocket asal kepada semua pelanggan yang berjaya disahkan.
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))
Salin selepas log masuk

5. Mulakan Pelayan

  • Buat fungsi untuk memulakan pelayan dan mendengar sambungan.
  • Tambah kod untuk menjalankan fungsi ini, memulakan pelayan proksi WebSocket anda.
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()

Salin selepas log masuk

Secara ringkasnya

Anda telah berjaya membangunkan pelayan proksi WebSocket berasaskan Python. Pelayan ini boleh mengesahkan identiti pelanggan, mengekalkan sambungan berterusan ke sumber data yang ditetapkan dan mengedarkan mesej yang diterima daripada sumber kepada semua pelanggan yang disahkan dengan berkesan. Fungsi ini terbukti tidak ternilai untuk aplikasi yang memerlukan penyebaran data yang selamat dan segera daripada asal tunggal kepada pangkalan pengguna yang pelbagai.

Langkah Seterusnya

Ujian pelayan yang teliti adalah penting untuk memastikan prestasi dan kebolehpercayaan yang optimum. Ia mengesahkan pengendalian sambungan dan penghantaran mesej yang betul. Untuk meningkatkan kecekapan, pertimbangkan untuk melaksanakan mekanisme pengimbangan beban dan menyesuaikan pengepala sambungan. Akhir sekali, adalah dinasihatkan untuk menggunakan pelayan ke persekitaran yang sesuai untuk penggunaan pengeluaran, seperti perkhidmatan awan yang direka khusus untuk menampung sambungan rangkaian jangka panjang.

Selain itu, sila lihat tutorial asal yang diterbitkan di tapak web kami: Menskalakan Soket Web Forex dengan Proksi Python

Atas ialah kandungan terperinci Melaksanakan WebSocket Forex Berskala Menggunakan Proksi Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan