862
2017-10-11 15:58:14
1
tcp connect가 이루어지기까지 가고, 오고, 확인하는 세단계가 있습니다... 최소구요.
100밀리 이내에 이루어 질려면 각 30ms정도에 이루어져야하는데, 중간에 방화벽이 있으면 방화벽이 확인하느라고
시간을 좀 잡아먹습니다. 그리고, 원격지(먼곳)에서 하면 네트웤 딜레이로 느려질수 있구요.
소켓 서버측에서 보면 다중 클라이언트 들어오기 시작하면 순차적으로 처리 할테니 또 늦게 들어온 클라이언트는 그만큼 느려집니다.
그래서, 기다림은 길지 않고, 최대한 느려도 connect이 이루어질정도로 timeout을 설정해야 합니다.
보통은 3초를 주면 됩니다. 한숨한번 쉬는 시간이고, 사람이 느리다라고 판단하는 시간이 3초 이하냐? 초과냐?입니다.
네트웤 미들웨어(서버/클라이언트 연결/통신을 총체적으로 해주는 서비스)가 보통 몇억씩 하는데,
이런 기초적인 문제들로부터 해방되기 위함입니다. 네트웤 프로그램은 통신 자체가 어렵기 보다는
케이스바이케이스의 닭짓이 너무 많은게 힘들기 때문에 연결되고, 통신 주고 받는다고 "나 할일 다 했다"하면 큰일 납니다.
통신 연결과 전송시 안됐을때의 케이스에 3겹으로 대응책을 만들면 개발자로서는 할 만큼 했다고 생각하는 일인입니다.
참고로, 테스트 할때 순차적으로 1천개를 연결하면(또는 4코어 cpu에서 250개씩 분담해서 연결할때) 접속 딜레이를 재보면
전부 10ms이하로 나옵니다... 하지만 실 서비스가 되고 아침 9시가 넘어갈때 똑같이 1000의 접속이 이루어지면
몇백개 이후로는 느려질거구요. 서비스 안되는 경우가 생길수도 있습니다.
요즘 배그 많이 하면서 여가생활 즐기는데, 서버 짠분... 못짠건 아니지만 그따구로밖에 못짜는지 싶습니다.
중국애들 접속 러시가 생기면 들어갈수가 없어요.. .. 요즘엔 서버 순차적으로 죽였다 살리는걸로 아예 방향을 잡은거 같은데,
원시적인 해결 방법이고, 처음부터 서버 한대당 커버할수 있는 클라이언트 갯수가 있다면 그 갯수 넘지 않으면 1년을 켜놔도
멀쩡하게 돌아야 됩니다.... 그게 네트웤 프로그램의 제일 중요한 점입니다.
동접 100만 이상이 어마어마 한것이긴 하지만, 몇달째 해결 못하고 있는 블루홀 보면 답답하기만 하죠. 앞으로 더 늘어날건데..