프로그래밍과 관련된 잡담
2007. 8. 11. 18:55
나는 지금 자그마한 프로젝트성 게임을 만드는것에 동참하고있다.
그중 나는 서버쪽을 맡고있다.
나는 간과하기 쉬운 사실하나를 엄청난 댓가를 치르고 알게되었다.
TCP/IP 통신할때 내가 여러신호를 연속으로 같은 대상에게 보내면
받는 측에서 그 신호는 하나로 쭉 이어져서 들어온다는것이다.
(버퍼길이만큼 찰때까지)
그래서 파싱에 문제가 생긴다는 사실을 알게되었다.
그래서 통신자체의 구조를 무조건 한측에서 일반적으로 한곳에만 뿌리는 신호를 없애버리고
질의 응답신호 OR 전체유저에게 뿌리는 메시지 의 구조로 만들었다.
그랬더니 위와같은 파싱의 문제는 발생하지않았다.
얕은 지식으로 알아본결과 TCP의 버퍼는 OS에서 관할하게되어있고 일단 그 메시지가
OS의 권한으로 넘어가게되면 강제로 플러시 할수도없다고 한다.
그래서 나온방법은 질의 응답....무언가를 요청하면 그 요청한것에대한 정보를 보내는것이다.
이렇게하면 일방적으로 보내는것도 없앨수있고, 메시지의 경계성이 없는 패킷을 보내는것도
방지할수가 있었다. 나로서는 좋은 경험이다.
그중 나는 서버쪽을 맡고있다.
나는 간과하기 쉬운 사실하나를 엄청난 댓가를 치르고 알게되었다.
TCP/IP 통신할때 내가 여러신호를 연속으로 같은 대상에게 보내면
받는 측에서 그 신호는 하나로 쭉 이어져서 들어온다는것이다.
(버퍼길이만큼 찰때까지)
그래서 파싱에 문제가 생긴다는 사실을 알게되었다.
그래서 통신자체의 구조를 무조건 한측에서 일반적으로 한곳에만 뿌리는 신호를 없애버리고
질의 응답신호 OR 전체유저에게 뿌리는 메시지 의 구조로 만들었다.
그랬더니 위와같은 파싱의 문제는 발생하지않았다.
얕은 지식으로 알아본결과 TCP의 버퍼는 OS에서 관할하게되어있고 일단 그 메시지가
OS의 권한으로 넘어가게되면 강제로 플러시 할수도없다고 한다.
그래서 나온방법은 질의 응답....무언가를 요청하면 그 요청한것에대한 정보를 보내는것이다.
이렇게하면 일방적으로 보내는것도 없앨수있고, 메시지의 경계성이 없는 패킷을 보내는것도
방지할수가 있었다. 나로서는 좋은 경험이다.