실시간 멀티 플레이어를위한 자바 스크립트와 PHP? [닫은]


13

HTML5 실시간 멀티 플레이어 (소규모) 브라우저 게임에 Javascript 클라이언트와 PHP / mysql 서버를 결합하는 것이 좋은 아이디어인지 궁금합니다.

내 기술 지식은 매우 제한적이며 앞으로 학습 node.js를 계획하더라도 학습 곡선은 지금 상당히 큽니다.

이미 PHP에 익숙하기 때문에 훨씬 빨리 작동한다고 생각합니다.

내가 생각하는 규모는 당시 2-8 명입니다. 그리고 클라이언트와 서버 간 메시지 수를 가능한 낮게 유지하려고합니다.

저장 / 처리하려는 값은 다음과 같습니다.

  • 플레이어 이름과 ID.
  • X와 Y 위치.
  • 건강.
  • 장착 된 품목 (최대 8 개 슬롯, 아마도 적은 수의 슬롯).
  • 행동 (도보, 공격, 사용 등 한 번에 1 명의 행동 / 플레이어 만).
  • 글 머리 기호 X, Y 좌표 및 궤적.
  • 길드 / 일족 이름.
  • 기본적인 채팅 / 메일 기능도 있습니다.

내 생각 엔 그것이 최상의 해결책은 아니지만 논리를 작게 유지하는 한 이것이 완전히 가능하다는 것입니다. 내가 맞아?


4
완벽하게 가능한 소리. 그냥 시도해 보지 않겠습니까? 최악의 경우, 당신은 학습에 시간을 보내고, 최선의 경우, 원하는 것을 정확히 얻습니다.
William Mariager

1
그래도 시간이 좀 걸리고 시간 낭비를 좋아하지 않기 때문에 여기에 물었다. =)
justanotherhobbyist

8
무언가를 배우면 시간이 낭비되지 않았습니다. ;) 고려해야 할 것은 언어 바꾸면 새로운 언어 배우고 동시에 네트워킹을 배우는 데 시간을 할애 할 수 있기 때문에 잘못된 부분을 찾는 데 훨씬 더 많은 디버깅이 필요하다는 것입니다. 알고있는 것을 고수하면 먼저 네트워킹을 배우고 비효율적 인 것으로 판명되면이를 포팅 할 수 있으며, 다음에 누군가 비슷한 질문을하면 테스트를했기 때문에 정답을 알게됩니다.
William Mariager

답변:


12

실시간 게임의 경우 대기 시간을 최소화하려고합니다. 다음은 PHP와 노드에 대한 정보와 함께 달성하기위한 두 가지 팁입니다.

  1. WebSocket을 사용하십시오. 서버와 클라이언트 간의 빠른 양방향 통신이 가능합니다. 여기서 node.js를 사용하면 파이프의 양쪽 끝에서 동일한 JavaScript API를 사용할 수 있다는 이점이 있습니다. WebSocket을 지원하지 않는 소규모 브라우저에 대체 기술을 제공하는 node.js를위한 훌륭한 socket.io 모듈도 있습니다. 인터넷 검색, 원한다면 PHP의 WebSocket을 사용할 수도 있습니다.
  2. 빠르게 움직이는 물체의 좌표와 같이 시간이 중요한 데이터에 데이터베이스를 포함시키지 마십시오. 이것은 메모리에 유지하는 것을 의미합니다. 이는 전통적인 PHP 사용 모델에 적합하지 않으며 각 요청 (또는 웹 서버)에 대한 요청마다 한 번씩 실행되지만 PHP 서버 앱을 독립형으로 시작할 수도 있습니다. 내가 추측에는 요 노드, 그 V8 코어와 빠른 PHP보다 더 될 것입니다 하지만. 이것이 문제인지는 게임의 요구와 서버의 성능에 달려 있습니다.

나 자신이 node.js를 매우 쉽게 찾을 수 있으며 어쨌든 꽤 많은 JavaScript를 코딩해야하기 때문에 시도해 보는 것이 좋습니다. 최소한 실시간 통신 채널을 설정하는 것이 얼마나 쉬운 지 보려면 socket.io 튜토리얼을 살펴보십시오.


포인트 2의 경우 +1입니다. 이로 인해 발생할 수있는 가장 큰 실수는 각 이벤트에서 MySQL 쿼리가 실행될 것으로 예상됩니다. HDD에서 게임 데이터를 옮기기 위해 할 수있는 모든 것이 도움이 될 것입니다. 나는 이것을 위해 Memcached를 학대하는 데 성공했습니다. 의심 할 여지없이 다른 방법이 있습니다.
DampeS8N

그래, 나는 실제로 노드를 배우고 싶지만 cmd조차도 시작하지 못했습니다. 개발자가 저지른 가장 큰 실수는 너무 어렵게 만드는 것이 었습니다. Atleast는 이제 Windows 버전에 설치 프로그램이 제공되므로 좋은 자습서를 찾으면 시도해 볼 수 있습니다.
justanotherhobbyist

노드를 시작하거나 사용하기가 전혀 어렵지 않습니다. PHP보다 어렵지만 PHP는 편의를 위해 끔찍한 가격을 지불합니다. 아파치에 내장되어 기본적으로 구성이없는 모든 곳에서 기본적으로 제공되는 디자인은 PHP를 완전하고 절대적으로 최악의 선택으로 만드는 많은 문제를 일으 킵니다. 실시간 게임 백엔드를 만들 수 있습니다. Node, Python, Ruby, Java 등은 모두 앱 서버를 설정해야하지만이 모델을 사용하면 PHP에서 달성하기가 불가능한 확장 성이 뛰어난 이벤트 중심 인 메모리 처리가 가능합니다.
Sean Middleditch

1

Tapio의 답변과 함께 (가능한 경우) 사용자 입력 (클릭 및 키보드 입력) 만 서버에 보내고 서버와 클라이언트가 게임을 에뮬레이트하도록 제안하고 싶습니다. 모든 N 틱이 클라이언트에게 서버에 동기화를 요청하면 서버는 클라이언트가 건강, 아이템 등 게임을 렌더링하는 데 필요한 모든 정보로 응답합니다. 이는 클라이언트도 비 동기화되지 않도록하기위한 것입니다. 많은.

물론 서버와 클라이언트 모두 정확히 동일한 게임 구현이 필요하므로 약간 더 많은 작업이 필요할 수 있습니다. 클라이언트와 서버 모두에서 완벽하게 구현 된 경우 클라이언트의 동기화 빈도가 떨어집니다.

이렇게하면 클라이언트 / 서버 메시징이 줄어들고 대기 시간이 줄어 듭니다. 이것은 또한 부정 행위를 예방하는 데 도움이 될 것입니다.

이 게임을 JavaScript로 작성한다고 가정하면 NodeJS를 사용하여 JavaScript로 백엔드를 작성하는 것이 좋습니다. 이런 식으로 서버와 클라이언트 모두에서 게임의 JavaScript 구현을 재사용 할 수 있습니다.


0

Nodejs를 배우는 것이 좋습니다. 이미 Javascript라면 어렵지 않을 것입니다. Nodejs를 사용하여 TRON 멀티 플레이어 게임을 빠르게 만들었습니다. (아, 그리고 클라이언트는 HTML5 캔버스였습니다. 다른 의견에서 언급했듯이 키 입력 만 보내고있었습니다.)

nowjs라는 모듈을 살펴보십시오. 행운을 빕니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.