lockstep 3

크레이지 아케이드 멀티게임(모작)

목차 1. 시연 영상 2. 서버와 동기화 3. 클라이언트 1. 시연 영상 https://www.youtube.com/watch?v=djo8hIFrLkg 2. 서버와 동기화 socket.io를 이용해 웹 소켓 으로 실시간 통신을 했습니다. 여러 클라이언트에서 동작이 같게 해야 했습니다. 동기화 방법을 찾아보니 lockstep이라는 기법이 있더군요. lockstep기법은 모든 클라이언트에서 서버로 정보를 전송하면, 해당 정보들을 클라이언트들에게 전송하는 가장 기본적인 동기화 기법입니다. c, c++언어에서는 소켓통신(tcp)를 하면 recv함수와 send함수를 사용하는데 recv함수는 정보를 받을 때까지 대기가 걸립니다. 코드만 짜면 lockstep이 자동으로 구현되는 것이죠. 하지만 socket.io는 이..

Node.js 2023.08.26

웹소켓(WebSocket) 8장 - socket.io와 lockstep

크레이지 아케이드를 html canvas로 구현하며, lockstep을 어떻게 socket.io로 구현해야 하나? 고민하였다. 1. setInterval 사용 그 고민의 결과가 setInterval을 사용해 정보를 전송하며, flag를 사용해 정보를 전송할지 말지 결정하는 것이다. 서버는 모든 플레이어의 키보드 정보가 저장되면, 모든 키보드 정보를 전송하는 event를 emit한다. 그러면, flag를 true로 만들고 화면이 갱신되는 것이다. 하지만 이 방법은 문제가 있다. flag가 false가 되어서 정보를 전송하지 않는다면, 다음 주기가 될 때까지 해당 프레임이 화면에 그려지지 않아 렉이 걸리는 듯한 현상이 일어난다. 처음에는 어쩔 수 없는 현상이라고 생각했다. 하지만 그건 나의 아이디어가 부족한..

Node.js 2023.08.24

웹소켓(WebSocket) 7장 - socket.io를 이용한 게임 동기화(마우스 위치 전송)

1. 서론 나는 c언어(cpp)로 소켓을 사용해 게임을 만들어본 적은 있었다. winapi로 체스, 크레이지 아케이드 모작을 만들었었다. 하지만 이번에는 웹소켓을 사용해 게임을 만들어보고 싶었다. 체스, 오목같이 실시간으로 바쁘게 통신하지 않는 게임은 만들기 쉬울 것 같았다. 물론 게임 로직을 만드는 것은 쉽지 않겠지만 통신이 쉬울 것 같다는 뜻이다. socket.io가 이벤트 기반으로 통신하기 때문에 이벤트가 발생하면 차례가 넘어가는 등으로 처리하면 될 것이다. 하지만 크레이지 아케이드 또는 스타크래프트 또는 fps게임처럼 실시간으로 바쁘게 통신하는 게임은 어떻게 게임 정보를 다수의 클라이언트가 동기화하는가? 이는 나의 오랜 고민이자 망상이었다. 하지만 이번에는 망상으로 끝나지 않고 chatgpt에 물..

Node.js 2023.08.01