2014-05-22 2 views
0

websocket-eventmachine-server을 사용하여 websocket 서버를 만듭니다.EventMachine에서 연결/클라이언트를 추적하는 방법은 무엇입니까?

내가하고 싶은 것은 사람들이 서로 1 대 1의 대화를 많이 가질 수있는 Android 앱을 만드는 것입니다. 즉, 각 사람은 1 대 1 대화를하는 많은 대화방에 가입해야합니다.

모든 온라인 메시지는 모두에게 메시지를 보내는 에코 서버를 제공하는 것 같습니다. 그것은 분명히 내가하는 일이 아니므로 개인에게 직접 메시지를 보내도록 추적하는 방법을 궁금해하고 있었습니까?

em-websocket의 경우 onopen 메서드에는 핸드 셰이크에 대한 반환 변수가있어서 uri에서 쿼리 필드를 얻을 수 있습니다. 필자가 작성한 샘플 코드를 참조하십시오. 그 쿼리를 사용하여 연결을 얻고 직접 메시지를 보내는 것을 볼 수있었습니다. 문제는 em-websocket이 현재 사용되지 않으며 websocket-eventmachine-server가 onopen에 핸드 쉐이크 리턴 변수를 제공하지 않는다는 것입니다.

websocket-eventmachine-server을 가진 많은 사용자와 1 대 1 메시징 시스템을 만드는 올바른 방법은 무엇입니까? 내가 고객을 추적해야한다면, 어떻게해야 하는가? EventMachine Repo :

clients = {} 
EventMachine::WebSocket.run(host: '0.0.0.0', port: '8080') do |ws| 
    ws.onopen { |handshake| 
     query = handshake.query # in client side I pass an id field so I know who connected 
     clients['query'] = ws 
    } 

    ws.onmessage{|msg_in_json| 
     params = JSON.parse(msg_in_json) 
     clients[params['recipient']].send params['message'] 
    } 
+0

이 도움말이 ['link'] (https://github.com/amardaxini/em-websocket-chat-demo) 정렬에 도움이되는지 확인하십시오. – Viren

답변

0

당신은 아마 EventMachine 저장소에서이 예를 살펴 싶다.

클라이언트의 연결을 추적하기 위해 상수 변수 (@@으로 표시)를 사용할 수 있습니다. 연결 시도는 EM::Connection 클래스의 post_init 메서드에서 이루어집니다. 연결에 성공하면 EM::Connectionconnection_completed으로 전화합니다. 연결에 실패하면 unbind이 호출됩니다 (정리시 유용).

고유 한 식별자를 사용하여 연결된 클라이언트를 배열에 저장하는 경우 클라이언트를 찾은 다음 send_data 메서드를 사용하여 해당 클라이언트에 물건을 보내는 것이 간단합니다.

관련 문제