This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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!"); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ws.on("user", (userData) => { / .. }) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"event": "user", | |
"data": { | |
"name": "John Doe", | |
... | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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') { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export interface WebSocketConfig { | |
url: string; | |
reconnectInterval?: number; | |
reconnectAttempts?: number; | |
} | |
export class WebsocketModule { | |
public static config(wsConfig: WebSocketConfig): ModuleWithProviders { | |
return { | |
ngModule: WebsocketModule, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export interface IWsMessage<T> { | |
event: string; | |
data: T; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export interface IWebsocketService { | |
on<T>(event: string): Observable<T>; | |
send(event: string, data: any): void; | |
status: Observable<boolean>; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// объект конфигурации WebSocketSubject | |
private config: WebSocketSubjectConfig<IWsMessage<any>>; | |
private websocketSub: SubscriptionLike; | |
private statusSub: SubscriptionLike; | |
// Observable для реконнекта по interval | |
private reconnection$: Observable<number>; | |
private websocket$: WebSocketSubject<IWsMessage<any>>; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, |
OlderNewer