2013-05-15 6 views
2

Node.js를 사용하여 서버를 구축하고 있습니다. 내 사용자를 나타내는 객체를 연관 배열에 저장하고 바로 그 객체의 색인은 해당 연결의 소켓 ID입니다. Socket.io 라이브러리를 사용하면 단순히 socket.id를 수행하여 얻을 수 있으므로 내 요청을 처리하는 각 처리기에 대해 어떤 사용자가 요청을했는지 항상 알 수 있습니다.연관 배열의 이중 인덱싱

모든 사용자는 연결된 사용자의 ID (소켓 ID와 다름)가 있습니다.

사용자 A가 사용자 B에게 메시지를 보낼 필요가

, 내 프로토콜과 같은 무언가로 메시지를 지정합니다 문제는 내가 다른에 대한 사용자의 메시지를 보내는 데 사용되는 핸들러가있을 때, 내가 예를하게 araises 이 : 메시지가 실행 내가 요청을 만든 사람 검색 할 수 socket.id를 사용되지만 보낼 때

내가 대기하는 핸들러가
MSG_KEY:{MSG:'hello world',USER_ID:'12345'} 

서버 측에 "MSG_KEY는"하고 문제가 있다는 것입니다 나는 그의 USER_ID를 사용하여 이번에도 사용자 B를 얻고 싶습니다. 세션 스푸핑을 피하기 위해 socket.id를 사용하고 싶지 않습니다.

나는 먼저 내 배열에서 사용자를 socket.id와 사용자 ID에서 모두 색인화하여 색인을 생성하는 방법에 대해 생각했습니다.

제 질문은 : 이것을하는 것이 좋습니까? socket.io는 이것을 단순화하는 방법을 제공합니까?

+0

FWIW에서 자바 스크립트에서 "연관 배열"이라는 용어는 일반적으로 사용되지 않습니다 (배열과의 혼동을 피하기 위해 - 표준 자바 스크립트 배열은 실제로 배열이 아니기 때문에 재미 있습니다). "지도"또는 "개체"는 일반적인 용어입니다. –

+0

설명해 주셔서 감사합니다 – MastErAldo

+0

질문 : 아래에 [edit] (http://stackoverflow.com/posts/16572324/edit) 링크가 있으며 필요에 따라 언제든지 해당 게시물을 편집 할 수 있습니다. 다른 사용자들도 그렇게 할 수 있습니다. 그래서 당신이 놓친 부분을 추가했습니다. 그리고 여기서 불필요한 노이즈로 간주되어 "감사합니다"부분을 추가하지 않았습니다. – bfavaretto

답변

1

그렇게 할 수없는 특별한 이유는 없습니다. 두 개의 개별 객체 (맵)를 사용하고 실제로는 문자열 대신 객체로 표현되도록하여 한 명의 사용자 (두 곳에서 참조) 만있었습니다.

예를 들어, 사용자 : 다음

var user = {userid: "JohnD", name: "John Doe"}; 

과 :

var usersByID = {}; 
usersByName[user.userid]; 

var usersBySocket = {}; 
usersBySocket[theSocketID] = user; 

심지어

var users = { 
    byID:  {}, 
    bySocket: {} 
}; 

users.byID[user.userid] = user; 
users.bySocket[theSocketID] = user; 
관련 문제