2011-11-14 2 views
1

사용자 정의 function (name,data,callback)을 정의 할 수있는 방법이 있으며 클라이언트가 함수 호출을 보낼 때 socket.io에 의해 호출됩니까?Socket.IO : socket.on을 사용하는 대신 사용자 정의 함수 호출

socket.on(name,function(data,callback){...}) 대신 socket.io가 내 기능을 호출해야합니다. 이렇게하면 모든 socket.io 함수에 필요한 로직을 구현하는 것이 훨씬 쉬워지고 각 연결에서 전체 스택의 스택에 socket.on을 호출 할 필요가 없습니다.

socket.io wiki를 확인했지만 관련 항목을 찾지 못했습니다.

나는 이처럼 socket.io 위에 "rpc 서버"를 구현할 수 있지만 socket.io의 기본 방법을 사용하는 것이 더 낫다는 것을 알고있다.

socket.on('rpc',function(data,callback){ /* e.g. data.name for function name, data.data for the actual data */}); 

답변

3

알 수 있을지 확실하지 않습니다. 이런 식으로 할 수 없니?

서버 :

function handleMessage(name, data, callback) { 
    // ... 
} 

// listen on all kind of messages 
socket.on('message', handleMessage); 

클라이언트 : 당신은 단지 WebSocket을 래퍼로 Socket.IO를 사용

socket.send(name, data, callback); 

이 방법.

더 많은 것을 찾고 있다면 아마도 nowjs 또는 dnode을 확인해야 할 것입니다.

+0

'socket.send'는 데이터와 콜백의 두 매개 변수만을 지원합니다. 그러나 콜백은 도청됩니다 (버그 보고서를 여기에 제출하십시오 : https://github.com/LearnBoost/socket.io/issues/645). 나는 당신이 지금 당장 제안한 것처럼 그것을 실제로하고있다 (bugfix로). 나는'socket.json.send ([name, data], cb)'와 함께 보낸다. (json message flag) – Eliasdx

+0

흠, 아마도'send'는 콜백을하지 않아도 될지 모르겠습니다. 당신은 언제나 한 바인딩을 가질 것이므로 앞으로 'emit'으로 되돌릴 수 있으며, 앞으로는 쉽게 변경할 수 있습니다. 미학 이외의 '방출'을 사용하지 않은 다른 이유는 무엇입니까? –

+0

??? 어떻게 서버 측 *에서 handleMessage() 함수 *가 클라이언트 측에서'callback' *을 호출 할 수있을 것이라고 가정합니까? ????? – cibercitizen1