Skip to content

Instantly share code, notes, and snippets.

View AlexDaSoul's full-sized avatar

Alexander Dukhnovskiy AlexDaSoul

View GitHub Profile
const ws = new WebSocket("ws://www.example.com/socketserver", "protocolOne");
ws.onopen = () => {
ws.onmessage = (event) => {
console.log(event);
}
ws.send("Here's some text that the server is urgently awaiting!");
};
const wsUser = new WebSocket("ws://www.example.com/user");
wsUser.onmessage = (event) => { // ... };
const wsNews = new WebSocket("ws://www.example.com/news");
wsNews.onmessage = (event) => { // ... };
const wsTime = new WebSocket("ws://www.example.com/time");
wsTime.onmessage = (event) => { // ... };
const wsDinner = new WebSocket("ws://www.example.com/dinner");
ws.on("user", (userData) => { / .. })
{
"event": "user",
"data": {
"name": "John Doe",
...
}
}
const ws = new WebSocket("ws://www.example.com");
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.event === 'user') {
// ...
}
if (data.event === 'news') {
export interface WebSocketConfig {
url: string;
reconnectInterval?: number;
reconnectAttempts?: number;
}
export class WebsocketModule {
public static config(wsConfig: WebSocketConfig): ModuleWithProviders {
return {
ngModule: WebsocketModule,
export interface IWsMessage<T> {
event: string;
data: T;
}
export interface IWebsocketService {
on<T>(event: string): Observable<T>;
send(event: string, data: any): void;
status: Observable<boolean>;
}
// объект конфигурации WebSocketSubject
private config: WebSocketSubjectConfig<IWsMessage<any>>;
private websocketSub: SubscriptionLike;
private statusSub: SubscriptionLike;
// Observable для реконнекта по interval
private reconnection$: Observable<number>;
private websocket$: WebSocketSubject<IWsMessage<any>>;
constructor(@Inject(config) private wsConfig: WebSocketConfig) {
this.wsMessages$ = new Subject<IWsMessage<any>>();
// смотрим конфиг, если пусто, задаем умолчания для реконнекта
this.reconnectInterval = wsConfig.reconnectInterval || 5000;
this.reconnectAttempts = wsConfig.reconnectAttempts || 10;
// при сворачивании коннекта меняем статус connection$ и глушим websocket$
this.config = {
url: wsConfig.url,