이 가이드는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 버전 3.10에 도입 된 Python의 새로운 "매치"진술에 대해 논의하며, 이는 다른 언어로 된 문장과 동등한 역할을합니다. 코드 가독성을 향상시키고 기존 IF-ELIF-EL보다 성능 이점을 제공합니다.

Python 3.11의 예외 그룹은 여러 예외를 동시에 처리하여 동시 시나리오 및 복잡한 작업에서 오류 관리를 향상시킵니다.

Python의 기능 주석은 유형 확인, 문서 및 IDE 지원에 대한 기능에 메타 데이터를 추가합니다. 코드 가독성, 유지 보수를 향상 시키며 API 개발, 데이터 과학 및 라이브러리 생성에 중요합니다.

이 기사는 파이썬의 단위 테스트, 이점 및 효과적으로 작성하는 방법에 대해 설명합니다. 테스트를 위해 UnitTest 및 Pytest와 같은 도구를 강조 표시합니다.

기사는 Python의 액세스 지정자에 대해 논의합니다. Python은 명명 규칙을 사용하여 엄격한 시행보다는 클래스 멤버의 가시성을 나타냅니다.

기사는 Python의 \ _ \ _ init \ _ \ _ () 메소드와 객체 속성 초기화에서 자기의 역할에 대해 설명합니다. \ _ \ _ init \ _ \ _ ()에 대한 다른 클래스 방법 및 상속의 영향도 포함됩니다.

이 기사는 @classmethod, @staticMethod 및 Python의 인스턴스 방법의 차이점에 대해 설명하며 속성, 사용 사례 및 이점을 자세히 설명합니다. 필요한 기능과 DA를 기반으로 올바른 메소드 유형을 선택하는 방법을 설명합니다.

inpython, youappendElementStoalistUsingTheAppend () 메소드 1) useappend () forsinglelements : my_list.append (4) .2) useextend () 또는 = formultiplementements : my_list.extend (other_list) 또는 my_list = [4,5,6] .3) useinsert () forspecificpositions : my_list.insert (1,5) .Bearware


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.
