이전 질문이지만 이전과 유사한 문제가 발생하여이를 수행 할 방법을 공유 할 것이라고 생각했습니다.
클라이언트 측
그래서 그 대신 방출하는 첫 번째 인수로 이벤트를 전달하는 클라이언트에 event
이나 뭐 같은 일반적인 이벤트 이름을 사용합니다. 나는 그것이 짧았 기 때문에 나는 app의 이름을 사용하는 것을 끝내었다. 그런 다음 데이터 객체에서 호출 할 함수의 이름을 전달합니다. 대부분 단지 emit
내가있는 socket.io 클라이언트를 감싸 그래서 -ing 클라이언트 측에서 모든 것을 다시 쓰기
socket.emit('genericEvent', {event:'awesomeSocketEvent', hello:'world'});
짜증, 내 클라이언트 물건이었다
그래서이 :
socket.emit('awesomeSocketEvent', {hello: 'world'});
이된다 다른 객체는 이벤트 이름과 데이터 객체에서 변경 한 자체 emit 이벤트입니다.
서버 측
이제 서버 측에서 오직 하나의 사용자 정의 이벤트가 genericEvent
라고 될 것, 그래서 사용자 정의 이벤트 객체의 속성으로 재구성 할 필요가있다. 그런 일이 발생하면 객체에 이벤트가 있는지 여부를 확인하거나 이벤트가 있으면 호출하거나 그렇지 않으면 이벤트를 수행합니다.
io.sockets.on('connection', function (socket) {
var events = {
awesomeSocketEvent: function(data){
// do your socket stuff here
}
};
socket.on('genericEvent', function(data){
if(data.event in events){
events[data.event](data);
} else {
// do your unknown event stuff here
}
});
});
그 부분을 쓰는 동안의 코드를 찾고 후, 나는 이벤트가 연결 이벤트 내에서 선언 된 객체 가진 성능에 대한 확실하지 않다. events
을 연결 이벤트 외부에 선언 한 다음 socket
을 모든 함수에 전달하는 것이 좋습니다.
wt u는 알 수없는 이벤트를 의미합니다. 서버 쪽에서 클라이언트에서 이벤트를 발생 시키면 socket.on ('urEventName', urFun)에 의해 해당 이벤트를 처리 할 수 있습니다. – sachin
해당 이벤트에 대해 등록 된 이벤트 핸들러가 없으면 서버에서 아무 것도 발생하지 않습니다. 요청 수신시 이벤트 이미 터는이 이벤트에 등록 된 핸들러가 있는지 확인합니다. 아무 것도 발견되지 않으면 그냥 반환합니다. –
Chandu
'알려지지 않은'이벤트가 방대한 상승으로 연결되면 해당 소켓의 연결을 끊고 싶습니다. 대규모 요청 (빈 이벤트 포함)은 서버로드가 많습니다 ... 클라이언트의 악의적 인 공격을 두려워합니다. – waitfor