Контекст : у меня есть угловое приложение с бэкэндом в nodejs.У меня есть канал, который будет обновляться при получении сообщения с сервера.Когда новые данные вставляются, сервер уведомляется, но мой другой компонент ничего не получает.Я реализовал сокет в сервисе, который вводится в оба компонента.
Мой сервер построен следующим образом:
const port = 3000;
const server = require('http').Server(app);
const io = require('socket.io')(server);
io.on('connection', (socket) => {
console.log('New Connection..')
socket.on('action', (data) => {
switch(data) {
case 'new_odds':
socket.emit('refresh_odds', 'UPDATE FEED! (FROM SERVER)')
break;
case 'new_results':
break;
}
});
});
//listen on port omitted
Мой сервис в угловом формате:
const SERVER_URL = 'http://localhost:3000';
@Injectable()
export class SocketService {
constructor() {
}
private socket;
public initSocket(): void {
this.socket = socketIo(SERVER_URL);
}
public disconnectSocket(): void {
this.socket.disconnect();
}
public send(action: Action): void {
this.socket.emit('action', action);
}
public onOddsMessage(): Observable<string> {
return new Observable<string>(observer => {
this.socket.on('refresh_odds', (data:string) => {
observer.next(data)
});
});
}
public onEvent(event: Event): Observable<any> {
return new Observable<Event>(observer => {
this.socket.on(event, () => observer.next());
});
}
}
Мой компонент канала использует сервис сокетов для прослушивания сообщений:
constructor(private _socket : SocketService) {
}
ngOnInit() {
this.initIoConnection();
}
private initIoConnection(): void {
this._socket.initSocket();
this.ioConnection = this._socket.onOddsMessage()
.subscribe((data: string) => {
console.log('Recieved data from oddsMessage')
//this.loadBetFeed();
});
}
В другом компоненте, также использующем сервис, который я пытаюсь передать в сокет на сервере.Он получает сообщение на сервере и отправляет новое сообщение, но мой компонент канала НЕ принимает это
testSocket() {
//NOTIFY SERVER THAT IT SHOULD TELL CLIENTS TO REFRESH
console.log('Test Socket Clicked')
this._socket.initSocket();
this._socket.send(Action.ODDS);
}
Я не понимаю, что я делаю неправильно - я использую общую службу,Даже если компоненты используют разные сокетные соединения, это не должно иметь значения, так как они слушают одинаковые сигналы?Я тестировал в 2 вкладках браузера, а также в режиме инкогнито.Любая помощь приветствуется!