2016-07-03 6 views
-3

동일한 사용자 스크립트가 설치된 플레이어간에 데이터를 보낼 수 있도록 온라인 브라우저 게임에서 새 소켓 이벤트 처리기를 만들려고합니다.클라이언트 쪽에서 소켓 방출 추가

게임은 여기 socket.io 사용하고 내가 지금까지 한 일이다 :이 같은 사용자 측 socket.on 처리기를 추가 : 내가 연결되어있는 두 선수에 이런 짓을

game.socket.on("hello", function() { console.log("hello there") }) 

나는이 작업을 수행 할 때 같은 게임에 있지만 : 개의 발광을 보내

game.socket.emit("hello") 

만 플레이어는 hello there는 로그 아웃.

내 생각에 서버 측에는 hello 이벤트를 발생시키는 처리기가 없습니다. 서버 측 코드에 액세스하지 않고 추가 할 수있는 방법이 있습니까? 아니면이를 피하고 다른 플레이어에게 직접 데이터를 전송할 수 있습니까?

+0

코드의 문맥을 크게 표시해야합니다. 'game.socket.emit ("hello")'는 하나의 소켓 끝점으로 만 메시지를 보냅니다. 끝점이 서버이고 서버가 다른 사용자에게 메시지를 보내려면 서버에 코드를 추가해야 해당 메시지를 수신 한 다음 다른 메시지가 수신되면 다른 플레이어에게 보내야합니다. socket.io는 클라이언트 - 서버 연결입니다. 한 클라이언트에서 socket.io (또는 websocket)의 다른 클라이언트로 직접 보낼 수 없습니다. 대신 서버로 보내야하고 서버가 다른 클라이언트에 전달해야합니다. – jfriend00

+0

답변 주셔서 감사합니다, 그게 내가 생각한 것입니다 – MarksCode

답변

1

나는 조금을 추가하고 대답에 내 의견을 켜집니다 :

socket.io 연결은 클라이언트와 서버 사이의 연결입니다. 클라이언트에서 해당 연결로 수행 할 수있는 작업은 모두 서버로 전송됩니다. 따라서 game.socket.emit("hello")은 서버로만 메시지를 보냅니다.

서버가 다른 사용자에게 메시지를 보내려면 서버에 코드를 추가해야 해당 메시지를 수신 한 다음 다른 플레이어에게 메시지를 수신 할 때 다른 플레이어에게 보내야합니다. socket.io는 클라이언트 - 서버 연결입니다.

socket.io (또는 socket.io가 기반으로하는 websocket)에서는 한 클라이언트에서 다른 클라이언트로 직접 보낼 수 없습니다. 대신 서버로 보내야하고 서버가 다른 클라이언트에 전달해야합니다.

:

+0

좋은 대답, 아주 분명 – TommyLike

1

Socket.io는 (check), 당신은 당신의 방 ID가 room_one이다 고려, 모든 객실 회원들에게이 메시지를 방출하는 클라이언트와 사용 서버 측에서 메시지를 보낼 수 있습니다를 도입 클라이언트 :

var socket = io(); 
socket.on('connect',function(){  
     socket.emit('join','room_one'); 
     socket.emit('room_message',{hello:'hello'}); 
}); 
socket.on('room_message',function(data){ 
     console.log(data); 
}) 

서버 :

io.sockets.on('connection',function(socket){  
    socket.on('join',function(room){ 
     socket.join(room); 
    }); 
    socket.on('room_message', function(data) {   
     io.to('room_one').emit('room_message',{world:'world'}); 
    }); 
}); 

소원이 유용 할 것입니다.

관련 문제