|
전 유저마다 고유한 Key 값을 할당하고, 룸내의 리스트에는 그 Key만을 저장합니다.
커넥션 객체를 가져오는것은 전체 유저 리스트에만 의존하구요(map을 쓰니 속도도 빠릅니다. 전체검색이 아니니까)
Indy라면 기본 리스트 대신 검색용으로 Key-객체 연관컨테이너를 하나 준비합니다. Disconnect 시에 하나 더 빼주는 작업을 해주는거죠
커넥션 객체를 여기저기에다 저장해 두는것은, Disconnect 시에 여기저기 다 찾아다니면서 리스트에서 빼야한다는거고
이방법은 속도 이전에 실수가 발생 할 가능성이 높아서 저는 그다지 애용하지 않습니다.
그나마 로비-룸 정도의 단순한 2단계 구조라면 할만하지만 5~6단계 이상이 되어버리면 제대로 골때립니다
용맨소녀 님이 쓰신 글 :
: 보낼때마다 LockList로 전체 유저 리스트를 구해와서 전송처리할 유저를 일일이 대조해서 보내야한다는건가요?
:
: 일단 그러면 확실히 처리가 되겠네요.. 근데, 위의 방법대로 하려면 수천명이 접속했을때 비교시간이 많이 걸릴것 같아서요..
:
: 근데, 저의 경우는 룸 클레스 안에 리스트를 하나 만들어서 입장한 유저들을 넣어놓는데요.. DB에서 데이터를 긁어와서 리스트에 있는 유저에게 바로 전송하려고 하는데, 이 방법은 좋은 방법이 아닌가요?
:
: 이렇게 하려면 LockList와는 다른 방법을 써야할 것 같은데요.. 이것때문에 좀 골치아픕니다..
:
:
: Lyn 님이 쓰신 글 :
: : DB 작업 다 끝나고 전송시작할때 UserList에 Lock 걸면 됩니다.
: :
: : 그때 나가고 없는 유저한텐 전송 안하는거구요 ...
: :
: : 용맨소녀 님이 쓰신 글 :
: : : 개념은 이해가 가는데요.. 실력이 허접해서 그런지 구현하려는데 얄랑꼬리한 부분이 있네요..
: : :
: : : 단순히 DB에 기록만 한다면 구현이 쉬울거 같은데요..
: : :
: : : DB에서 자료를 읽어 들인 다음에 이걸 방에 있는 유저들에게 전송하려고 한다면, 어떤 식으로 구현해야 할까요?
: : :
: : : 전송해야할 유저들 클레스까지 묶어서 큐에 넣어야 할까요?
: : :
: : : 이러면 비동기적인 처리가 될 것 같은데, DB를 처리하는 동안 유저가 접속을 끊는다거나 방을 나갈 경우를 대비해서 크리티컬 섹션을 걸고.. 그런 식으로 구현해야 할까요?
: : :
: : : DB처리 부분에서 걸면 전반적인 속도가 느려질 것 같은데요..
|