첫 번째 문제는 오래 전부터 lurker이지만 처음 사용자인데 사이트를 만드는 데 모두 감사드립니다!독점 프로토콜 (Python, select, epoll)에 대한 수명이 긴 다중 스레드 클라이언트
독점 프로토콜의 클라이언트 부분을 구현해야하는 상황에 처해 있습니다. 프로토콜은 아래에 TCP/IP를 사용하여 다음과 같이 메시지 흐름이 요약 될 수있다 :
- 클라이언트가 서버에 연결
- 클라이언트는 특정 유형의 데이터에 대한 관심을 표현
- 서버가 이러한 데이터가 있으면 이 클라이언트는
- 클라이언트가 지금은 여전히 같은 유형
- 서버의 데이터에 관심이 서버를 말할 필요가 서버에 수신을 확인하는 클라이언트로로 데이터를 전송
- 클라이언트에 내려 보내 들어오는 중
- 클라이언트는 수시로 서버에 응용 프로그램 수준의 연결 유지 요청을 보내야합니다 (매분마다)
- 서버의 일부 메시지는 클라이언트가 응답을 다시 보내야합니다. 서버
- 클라이언트는 모든이가 장수 하나를 일종의 웹 소켓처럼 내가 상상할 수있는 하나의 TCP 세션 내에서 발생하는 것입니다
을 끊습니다.
또 다른 점은 클라이언트가 멀티 스레드 서버에 배포되어야하며 여러 스레드로부터 동시에 액세스 할 수 있어야한다는 것입니다. 즉, 단일 스레드가 특정 유형의 메시지를 '구독'할 수 있어야합니다. 서버와 메시지를 보낼 수도 있어야합니다.
저는 GIL을 잘 알고 있기 때문에 그것에 대해 논평하는 것은 그리 좋지 않습니다. 저는 클라이언트 만 쓰고 있습니다. 아키텍처의 다른 부분은 변경할 수 없습니다.
그래서 HTTP 수준 아래에서 탐구 할 필요가 없었습니다. 항상 기존의 라이브러리를 사용하기에 충분히 운이 좋았지 만, 많은 네트워크 프로그래밍을 수행하지는 않았지만, 내가 처음으로 그런 모습이 될거야.
나는 select, epoll, libev 또는 gevent와 같은 모든 비동기 라이브러리/툴/툴킷에 대해 더 많이 배울 수있는 기회가되고 싶습니다.
웹상의 리소스 대부분이 서버 작성과 관련되어 있으며 멀티 스레드에 클라이언트를 배포 할 것이라는 확신이 들지는 않습니다. 많이해라. 모든 서버 사람들은 분명히 단일 스레드이지만, 다중 스레드가 필요하지 않거나 epoll과 같은 것들이이를 사용하는 다중 스레드를 좋아하지 않기 때문에이 스레드가 필요한지 확실하지 않습니다.
서버는 모든 클라이언트를 단일 스레드 장치처럼 취급하므로 명확하게 클라이언트에 대한 액세스를 직렬화해야한다고 생각합니다. 내가 얻을 수없는 것은 서버 응답이 스레드와 일치하는지 확인하는 방법입니다. 한 스레드가 메시지를 받았지만 다른 스레드가 메시지를 확인하기 전에받은 메시지를 확인해야 할 경우 메시지가 어떻게 섞이지 않을지 어떻게 확신 할 수 있습니까?
당신은 어떻게 생각하십니까? 이 경우 비동기 라이브러리가 좋은 선택입니까?내가 볼 수있는 코드 샘플을 생각해 볼 수 있습니까? 저는 Python을 사용하고 있습니다. 그러나 제가 생각하기에는 영감을 얻기 위해 C, C++ 또는 Java를 사용할 수있을 정도로 충분히 일반적인 것입니다.
많은 분들께 감사드립니다.