개발 Q&A

제목 웹소켓 이용해 보신 분 계신가요?
글쓴이 토끼와거북 작성시각 2013/10/17 12:12:40
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 33893   RSS
채팅서버를 기반으로 학습게임 사이트를 만들려고 합니다.
처음에는 ajax 와 db를 연동해서 연습을 했는데 동시접속자가 많을 경우에는 이 방법은 비추천이라고 하더군요. 
웹소켓으로 구현하는 방법을 알게 되었는데요. 
혹시 실무에서 이용해 보신 분 계시면 서버 1대당 동시접속자수라던가 다른 장단점을 좀 알려 주시면 감사하겠습니다. 
 다음글 질문하나만 하고 가실께요 (2)
 이전글 jquery ajaxForm (1)

댓글

우왕아항 / 2013/10/17 18:06:40 / 추천 0
웹소켓이래 봤자 기존 소켓통신을 웹에서 받을 수 있게끔 정의한것에 지나지 않습니다. (핸드셰이크 처리가 추가된..)
당연히 소켓 컨넥션에 수많은 절차를 거치는 http통신 보다 서버 부하에 대해서는 훨씬 유연합니다.

채팅을 어떤식으로 서비스할지나 부하량에 따라 서버 아키텍쳐가 다르게 설계되기 때문에 동시접속자 수의 예측은 힘든데요.

서버는 32비트 환경에서 개발해도 이론적으로 65535개의 소켓을 받을 수 있습니다.
이는 일반적인 운영체제가 저정도로 제한 하고 있기 때문도 있지만, TCP/IP의 헤더 구조상 하나의 아이피에 사용될 수 있는 포트 수가 65535개를 벗어나지 못하기 때문입니다. 물론 서버운영체제로 바꾸고, 네트워크 장비를 복수로 취하는 방법으로 컨넥션을 늘릴 수 있습니다.

컨넥션을 많이 받을 수 있더라도 로직의 처리속도 혹은 IO가 늦어지면 사실상 저정도 동시접속은 처리할 수 없구요. 처리 속도 향상을 위해서 클라이언트 별 쓰레드를 줄이거나 휴식중인 소켓을 죽이거나 등등 별별 시도를 다 하면 동시접속자 수는 1대당 10만 이상 받을 수 있겠지만 이건 오랜 경험을 통해 나오는 노하우라서..

결론은 개발자 역량에 따라서 매우 많이 받을 수 있을겁니다.

요즘은 무작정 1대당 많이 받는 형태보다 하드웨어만 늘리면 알아서 클라우딩되는 형태의 개발을 많이 취합니다. 유지보수의 스트레스를 돈으로 해결하는 쪽으로 많이 기울고 있습니다. (웹서버 구조가 그렇듯이..)
방문넷 / 2013/10/17 19:01:58 / 추천 0
 아주 쉽게 가고 스트레스 없이 가실꺼면 node.js + socket.io 추천드립니다.

음 저의 경우는 실시간 접속현황 + 강제 벤 + 쪽지보내기 + 실시간 글 알림 + 실시간 댓글알림하여서 

동시접속 5000 여명 정도 커버 치고있습니다(다만 좀 버벅이는 감이 없지않아있습니다)

워낙에 페이지 이동이 많다보니 socket이 접속되고 끈기고 접속되고 끈기고하다보이.. 5천명까지는 힘들게 버티고 

2000명까지는 어느정도 여유롭게 버팁니다(q8300 + 램 8기가 + 하드 500기가 서버 입니다, 100메가 데디)


제가 서버 자원 최대로 활용해서 최대 4600명까지 안정권으로 소켓 연결을 유지 시킨적이있습니다(근데 동시에 몇백명이 접속을 끈으면 서버 부하 심각하게 걸렸던게 함정)

음 서론이 너무 길었네요

node.js를 추천드린게 제가 느끼는 장단점 입니다.

장점
- node.js는 자바스크립트 엔진이기에 자바스크립트를 아신다면 좀 거부감이 덜하실껍니다. 진짜 자바스크립트 입니다.
- 비동기 방식을 선호하신다면 가볍게 서버개발을 하실수있습니다.
- socket.io라는 멀티플랫폼 웹소켓서버 이용하시면 좀더 쉽게 소켓서버 운영가능하십니다

단점
- node.js 의경우는 디버그하기가 참 거시기합니다( 오류있는 구문 실행하기전까지 절대 오류 안남. 오류 있는 구문이 실행됬을때 서버 뻗어버림)
- socket.io라는 모듈은 편하지만 동시접속이 많으면 많을수록 렉이 발생 함. 네이글알고리즘을 끄고 v8엔진을 수정보고 가비지 콜렉션을 제어하면 빨라진다지만 이것도 미지수임 실전을 통해 겪어야 가능함.

대충 이정도이네요. 제 기준점에선 node.js로 소켓서버 운영하셔도 괜찮다 싶을정도입니다

단 동시접속이 너무 많지않다는 가정하에요 ^^