Я пишу nodejs, угловое клиент-серверное приложение, которое использует сокетные соединения. Когда я на домашней странице или следующей странице, то это создает один сокет и работает правильно, когда я иду на 2 уровня глубже (маршрутизация), он генерирует несколько сокетов,Я использую пространство имен, так как на каждой странице мне нужно различное сокетное соединение, основанное на разных объектах запроса.
Это код для создания сокетного клиента в угловом приложении
import { Injectable } from '@angular/core';
import * as io from 'socket.io-client';
import { Observable } from 'rxjs/Observable';
import { Config } from '../config/env.config';
import { SocketConfig } from '../config/socket.config';
@Injectable()
export class SocketService {
public host: string = Config.HOST;
/**
* * Creates a new SocketService
*/
initHomeSocket() {
return io(this.host + SocketConfig.HOME);
}
initDashBoardSocket(dashboardId: string) {
const query = 'dashboardId=' + dashboardId;
return io(this.host + SocketConfig.DASHBOARD,
this.setOptions(query));
}
initDabaseSocket(dbId: string, queryId: string) {
const query = 'queryId=' + queryId + SocketConfig.KEYJOIN +
queryId;
return io(this.host + SocketConfig.DATABASE,
this.setOptions(query));
}
getSocketEmit(emitEvent: string, socket: SocketIOClient.Socket) {
const observable = new Observable(observer => {
socket.on(emitEvent, (data: any) => {
observer.next(data);
});
return () => {
socket.disconnect();
};
});
return observable;
}
setOptions(queryString: string) {
return { 'secure': SocketConfig.SECURE, 'reconnection':
SocketConfig.RECONNECT, 'reconnectionDelay':
SocketConfig.RECONNECT_DELAY, 'reconnectionDelayMax':
SocketConfig.RECONNECT_DELAYMAX, 'reconnectionAttempts':
SocketConfig.RECONNECT_ATTEMPTS, transport: SocketConfig.TRANSPORT,
query: queryString };
}
}