Meteor를 사용하여 텍스트 기반 어드벤처 게임을 개발 중이며 특정 요소를 처리하는 방법에 문제가 있습니다. 즉, 클라이언트의 입력없이 서버에서 클라이언트로 데이터를 내보내는 방법.Meteor를 사용하여 서버에서 클라이언트로 데이터 스트리밍 :
플레이어가 몬스터와의 전투에 참여하면 전투 피해와 플레이어 및 몬스터 개체 업데이트가 서버의 루프에서 발생하게됩니다. 플레이어가 손상을 입으면 그에 따라 클라이언트 UI를 업데이트해야합니다. Publish/Subscribe를 통해 이와 같은 것이 가능합니까?
기본적으로 서버의 이벤트를 수신하여 그에 따라 전투 로그를 업데이트합니다. 의사 코드에서
,이 라인을 따라 뭔가 내가 무엇을 찾고 있어요 :
// Client Side:
Meteor.call("runCommand", "attack monster");
// Server Side
Meteor.methods({
runCommand: function(input) {
// Take input, run the loop to begin combat,
// whenever the user takes damage update the
// client UI and output a line saying how much
// damage the player just received and by who
}
});
난 당신이 클라이언트에 컬렉션을 게시 할 수 있음을 이해하지만 정말의 특정 아니다 함수를 찾고 싶습니다. 클라이언트에 전체 Player 객체를 게시하고 싶지는 않습니다. 클라이언트에게 "당신이 괴물에 의한 12 점의 피해를 입혔습니다!"라는 텍스트 상자에 라인을 쓰라고 말하고 싶습니다. ".
내가 원하는 경우 SocketIO와 비슷한 기능이있어서 UI를 업데이트하라는 클라이언트에 이벤트를 내 보내기를 바랬습니다. 필요한 경우 SocketIO를 사용할 수 있다고 생각합니다. 그러나 사람들은 SocketIO없이 Meteor를 사용할 수 있다고 확신하는 것처럼 보였습니다.
이 시나리오에서 볼 수있는 유일한 문제는 다음과 같습니다. 나쁜 생각처럼 느껴지는 모든 게임 로직 클라이언트 측 작성, 모든 전투 로그를 매우 과도하게 보이는 컬렉션에 작성합니다 (하지만 그렇지 않을 수도 있습니다). , 또는 어떤 종류의 SocketIO type-tool을 사용하여 메시지를 클라이언트에게 보내어 텍스트 상자에 새로운 줄을 쓰라고 지시 할 수 있습니다.
내가 컬렉션에 쓰는 것은 전혀 과도한 생각하지 않습니다 , 그러나 나는 유성의 내부에 너무 익숙하지 않다. 내 이해하지만 단지 diffs는 클라이언트에 동기화되므로 컬렉션에 문서를 추가하거나 업데이트하면 모든 것이 동기화됩니다. 컬렉션은 클라이언트와 서버간에 동기화되는 유일한 데이터이기 때문에 나는 유적 (폴링 제외)에 다른 옵션이 있다고 생각하지 않습니다. –
[meteor-streams] (http : //arunoda.github.io/meteor-streams /) 패키지는 더 이상 유지 관리되지 않지만 이러한 종류의 기능을 구현하는 좋은 방법이며 여전히 잘 작동합니다. – richsilv
나는 진정으로 유성 - 시내가 작동하지 못하게했다. 제공된 터미널 명령을 사용하여 설치 한 다음 예제를 복사하여 내 코드에 붙여 넣었습니다. 나는 생성되는 객체를 볼 수 있지만 실제로 "emit"및 "on"메서드는 전혀 응답이 없습니다. "on message"이벤트를 트리거하지 않습니다. – Kich867