2013-05-26 4 views
3

현재 작은 대화를 작성 중입니다.Node.js + socket.io는 이벤트에 대한 데이터를 반환합니다.

누군가가 엔터를 누르면 서버에 메시지를 제출하고 삽입이 성공하면 상태 정보를 반환해야합니다.

모든 이벤트에서 일부 데이터를 반환하는 방법이 있습니까, 아니면 상태를 클라이언트에게 알리기 위해 서버에서 다른 보내기를 시작해야합니까?

클라이언트

$('textarea').keypress(function(e) { 

    if(e.which == 13) { 

       var msg = $.trim(this.value); 

       if(msg.length > 0) { 

         socket.send(msg, function() { 

          // Here I need to have some result 
          // returned by the server to notify the user 
          // if everything went fine 
          //this.value = ''; 
         }); 
       } 

       return false; 
     } 
}); 

서버

socket.on('message', function() { 

     db.query("INSERT INTO chat (message, ip, time) VALUES (?, INET_ATON(?), NOW())", [msg, socket.handshake.headers['x-forwarded-for'] || socket.handshake.address.address], function(error) { 

       if(!error) { 
         io.sockets.send(msg); 
       } else { 
         console.log(error); 
       } 

     }); 
}); 

답변

0

나는 최근이 문제에 달렸다. 내 솔루션은 모든 메시지에 명령 ID를 넣는 것이 었습니다. 나는 클라이언트 측에서 ID를 만들기위한 약간의 함수 (here)를 만들었다. 그래서 흐름은 다음과 같습니다

클라이언트

  • 사용자가 저장해야 뭔가 않는 경우 :
  • 명령을 설명하는 객체를 생성하는 명령
  • 에 대한 ID를 생성을
  • 소켓을 통해 서버에 명령을 보냅니다.

서버

  • 명령을 적용 명령 메시지 (데이터베이스 등) 명령이 성공하면
  • 를 수신하는 "명령 완료"메시지 유형
으로 소켓을 통해 클라이언트에게 다시 명령 ID를 전송

  • 명령 완료 메시지를 같은 명령
  • 마르크를받을 클라이언트

    socket.on 'du', (msg) => 
        @saveData(msg, -> 
        # broadcast to other users if needed 
        socket.emit('cc', msg.data.commandId) 
    ) 
    
    : 클라이언트 측 서버 측 단계에 대한

코드에 "완료"

관련 문제