2014-09-22 6 views
0

나는 파이썬 프로그래밍 언어로 제공되는 WAMP WS를 사용하여 websocket 서버를 만들었습니다.WAMP WS에서 필요한 클라이언트를 가져 오는 동안 오버 헤드가 발생했습니다.

나는 한 번에 WAMP WS 서버로 약 500 명의 클라이언트를 구독해야한다는 요구 사항이 있습니다.

그러나 데이터를 게시 할 때 특정 조건에 따라 단일 클라이언트에게만 데이터를 보냅니다. 나는 cliets 목록을 반복하여 해당 자격을 확인한 다음 해당 클라이언트에게 데이터를 보내는 것이 매우 간단하다는 것을 알고 있습니다.

필요한 클라이언트가 마지막 위치에있는 경우 루프를 사용하면 큰 오버 헤드가 발생하므로 루프를 사용하지 않고 다른 방법이 있는지 알고 싶습니다.

답변

0

아마도 각 클라이언트의 자격 데이터를 반복하고 해당 데이터를 기반으로하는 일종의 결정을 내릴 것입니다. 자격 데이터에 대한 색인을 통해 즉시 액세스 할 수 있습니다. 그래서 의사 코드 같은 것을 사용 : 나는 자격 데이터가 무엇인지 알고 있지만, 그것은 클라이언트의 무게 말을하지 않습니다

client_array = [] 
client_index = {} 
client_array.add(new client) 
if not new client.eligibility_data in client_index: 
    client_index[new client.eligibility_data] = [] 
client_index[new client.eligibility_data].add(new client) 

합니다. 200에서 205 포인트 사이의 모든 사람들에게 메시지를 보내려면 client_index [200]에서 [205]까지 해당 클라이언트를 찾을 수 있습니다.

조건을 직접 결정할 수없는 경우 클라이언트 대상을 결정하기 위해 임의의 쿼리를 처리 할 수있는 데이터베이스가 필요할 수 있습니다.

0

publish을 할 때 options (예 : options)을 통해 일정에 적합한 수신자 목록을 제공 할 수 있습니다. this와 유사합니다. 대상 수신기 목록은 WAMP 세션 ID 목록으로 지정해야합니다 (이 경우 WAMP 클라이언트를 식별하는 올바른 방법입니다).

내부적으로, AutobahnPython은 파이썬 세트와 세트 연산을 사용하여 실제 수신자를 계산합니다. 이는 매우 빠릅니다 (기본 제공 언어는 기본 코드 실행을 의미합니다).