Below you will find pages that utilize the taxonomy term “network”
Posts
golang (네트웍) 프로토콜 생성기
https://github.com/kasworld/genprotocol
genprotocol - protocol 기반 코드 생성 ( goguelike 프로젝트를 하면서 만들어진 ) 네트웍 등에서 사용하기 위한 protocol 을 작성하는데 필요한 반복적 이고 기계적인 코드들을 자동으로 생성 해주는 프로그램 입니다. https://github.com/kasworld/wasmwebsocket 을 보면 예제를 볼 수 있습니다. 작성 이유는 하나의 프로젝트에서 여러종의 protocol 을 사용할 일이 생겨서 반복된 코드를 작성하다 보니 만들게 되었습니다. goguelike 를 예로 들면 game client - tower server tower server - ground server 의 2종의 protocol이 필요하고 사실상 비슷한데 조금 다른 코드들이 서로 구별 되어 쓰입니다.
Posts
udp와 network jitter
지난글 http://kasw.blogspot.com/2018/01/tcp-udp.html
이후로 goguelike2에 udp 지원을 넣기 위해 작업을 계속하고 있었는데 드디어 오늘 udp로 goguelike2 server 와client을 연결 tcp와 똑같이 작동시키는데 성공했습니다.
udp 작업만 한것은 아니고 필요한 다른 작업들도 동시에 하고 있었기 대문에 생각보다 좀 오래 걸린듯 합니다.
좀 집중해서 작업했으면 2주 정도는 당길수 있었을것 같지만 이런 저런 일들을 처리 하기도 하느라 시간을 좀 썼습니다.
그리고 부산물로 tcp 와 udp 를 동시에 지원 가능한 net 라이브러리가 생겼습니다. ^^
udp를 지원 하도록 바꾸면 tcp와의 차이를 비교 하는 것이 힘들 것 같아서 고민하다가 두가지를 거의 같은 구조로 지원 할수 있게 기반 작업들이 이루어지고 나니 그러면 동시에 지원하게 하면 좋겠네?
Posts
tcp 와 udp
goguelike2는 서버 클라이언트간 패킷전송을 초당 2 번, 즉 2 frame / sec 로 하고 있습니다.
사용자 행동(입력)은 각 frame 마다 서버로 전송되고
서버에서는 각 frame 별로 사용자 액션을 실행 결과를 돌려주는 동시에 그 결과로 변화된 field 상황을 viewport로 만들어 각 클라이언트에 전송합니다.
처음에는 초당 3번을 하도록 했었는데
local 이 아닌 wifi로 연결된 서버와 클라이언트에서 테스트라 했더니
서버 - 클라이언트간 전송 latency가 들쑥날쑥해서 클라이언트가 처리하기가 애매 했습니다.
frame jitter(?) 가 100% 가 넘는 경우가 생기더군요.
Posts
go언어에서 tcp server/client 의 전형적 형태. - 라이브러리화.
이미 두곳을 통해서 부분부분은 소개 했었지만
http://kasw.blogspot.kr/2015/02/go-goroutine.html http://kasw.blogspot.kr/2015/02/goguelike.html
기존 netspeed 테스트 프로그램과 goguelike에서 사용하고 있던 tcp server/client 구조를 본격적으로 재사용 가능하게 수정한 것입니다. ( 그래봐야 간단합니다. ^^)
tcp책에 나오는 전형적인 tcp server의 구조는 대부분의 언어에서 새 process / thread를 실행하는 비용이 너무나도 큰 관계로 이론적으로 설명하는 용도로만 사용하고 실제 서비스를 만드는 데에는 사용할수 없습니다.
다만 go언어에서는 go routine이 존재 하기때문에 이 “전형적"인 구조가 실용가능하게 됩니다. ( 꼭 go 언어가 아니라도 python stackless, greenlet , 또는 이와 유사한 micro thread를 지원 하는 모든 언어에서 가능합니다만 이를 지원 하는 대중적 언어가 별로 없지요.
Posts
goguelike의 네트웍 속도
일단 python에서 네트웍 속도로 이것 저것 해본 글들 http://kasw.blogspot.kr/search/label/wxgame
goguelike를 튜닝하던 중에 네트웍 패킷 처리량이 얼마나 되나 하고 테스트 해보니 20000 packet/sec 정도 밖에 안나와서 충격을 먹고 네트웍 부분을 집중적으로 검사및 튜닝을 한 이야기..
결론만 말하면 go 언어의 능력이면 1000 클라이언트 ( 10000클라이언트 에서도 속도 저하는 10% 이하) 에서 150000 패킷 / 초 정도를 처리 할 수 있습니다.
파이썬에선 정말로 최후까지 쥐어 짜야 60000넘기는 것도 힘들었던것에 비하면 깨끗한 구조를 유지하면서도 2.