2014-06-05 4 views
0

아래와 같이 보이는 socket.io 통신을 처리하는 서버에 typescript 클래스가 있습니다. 기본적으로 작동하지만, 서버는 최신 소켓 참조를 저장합니다. (누군가가 연결될 때마다 변수가 겹쳐 쓰기 때문에 마지막으로 서버에 연결된 사람). socket.io의 소켓에 대한 참조가 끊어졌습니다.

class ChatService { 
    private server; 
    private app; 
    private io; 
    private socket; 
    constructor(app, server) { 
     this.app = app; 
     this.server = server; 
     this.io = require('socket.io').listen(this.server); 
     this.io.set('log level', 1); 
     this.io.sockets.on('connection', (socket) => { 
      console.log('a user connected'); 
      socket.join('test'); 
      console.log(this.io.sockets.clients('test').length + ' - ' + socket.id); 
      this.socket = socket; 
      socket.on('message', (data) => this.onMessage()); 
      socket.on('disconnect', function(){ 
       console.log('user disconnected'); 
      }); 
     }); 

    } 

    public onMessage() { 
     this.socket.broadcast.to('test').emit('message', { 
      message: 'test message' 
     }); 
    } 

} 
export = ChatService; 

는 내가 (내가 socket.broadcast.to('test').emit()를 호출 할 수 있도록) 올바른 참조가 할 수있는 방법 어떤 좋은 방법이 있습니까. 어쩌면 클라이언트가 소켓 요소를 보내서 서버에 넣을 수있는 방법이 있을까요? 이에 의해

+0

그러나 onMessage는 클라이언트 측에서 트리거되어야합니까? onmessage 함수를 통해 서버에 메시지를 수신하면 Socket.io는 쓸모가 없습니다. – Jujuleder

+0

클라이언트에서 내가 onocket.emit ('message')를 보내고 있기 때문에 onMessage 함수를 사용하고 있으며이 메시지를 모든 연결된 사용자 (발신자 제외)에게 브로드 캐스트하기를 원합니다. 클라이언트 측에서 연결된 사용자는 변경 사항을 표시 할 수있는 메시지를받습니다. – Safari

답변

2
socket.on('message', (data) => this.onMessage()); 

변경을 :

socket.on('message', (data) => this.onMessage(socket,data)); 

그런 다음 당신은 당신이 방송에 필요한 데이터를 재전송하는 모든 것을 갖추고 있습니다.

public onMessage(socket,data) { 
    socket.broadcast.to('test').emit('message', { 
     message: 'test message' 
    }); 
}