WebSocketSubjectConfig

2020-10-09 14:27 更新

WebSocketSubjectConfig 是一個普通的對象,它使我們能夠 webSocket 可配置。

interface WebSocketSubjectConfig<T> {
      url: string
      protocol?: string | Array<string>
      resultSelector?: (e: MessageEvent) => T
      serializer?: (value: T) => WebSocketMessage
      deserializer?: (e: MessageEvent) => T
      openObserver?: NextObserver<Event>
      closeObserver?: NextObserver<CloseEvent>
      closingObserver?: NextObserver<void>
      WebSocketCtor?: {...}
      binaryType?: 'blob' | 'arraybuffer'
    }

描述

提供靈活性 webSocket

它定義了一組屬性以提供特定的自定義行為 套接字生命周期的時刻。 連接打開后,我們可以 使用 openObserver中,當連接關閉 closeObserver,如果我們 有興趣的監(jiān)聽數(shù)據(jù)從正在添加服務器: deserializer, 這使我們可以在傳遞數(shù)據(jù)之前自定義數(shù)據(jù)的反序列化策略 到套接字客戶端。 默認情況下 deserializer將應用于 JSON.parse每條消息 從服務器。

deserializer ,此屬性的默認值為, JSON.parse但由于只有兩個選項 對于傳入數(shù)據(jù),可以是文本或二進制數(shù)據(jù)。 我們可以應用自定義反序列化策略 或只是簡單地跳過默認行為。

import { webSocket } from 'rxjs/webSocket';


const wsSubject = webSocket({
    url: 'ws://localhost:8081',
//Apply any transformation of your choice.
    deserializer: ({data}) => data
});


wsSubject.subscribe(console.log);


// Let's suppose we have this on the Server: ws.send("This is a msg from the server")
//output
//
// This is a msg from the server

序列化程序 允許我們使用自定義序列化策略,但對于傳出消息

import { webSocket } from 'rxjs/webSocket';


const wsSubject = webSocket({
    url: 'ws://localhost:8081',
//Apply any transformation of your choice.
    serializer: msg => JSON.stringify({channel: "webDevelopment", msg: msg})
});


wsSubject.subscribe(() => subject.next("msg to the server"));


// Let's suppose we have this on the Server: ws.send("This is a msg from the server")
//output
//
// {"channel":"webDevelopment","msg":"msg to the server"}

closeObserver 當出現(xiàn)錯誤時, 允許我們設置自定義錯誤。

import { webSocket } from 'rxjs/webSocket';


const wsSubject = webSocket({
    url: 'ws://localhost:8081',
    closeObserver: {
        next(closeEvent) {
            const customError = { code: 6666, reason: "Custom evil reason" }
            console.log(`code: ${customError.code}, reason: ${customError.reason}`);
        }
    }
});


//output
// code: 6666, reason: Custom evil reason

openObserver ,假設我們需要先執(zhí)行某種 init 任務,然后再將消息發(fā)送/接收到 webSocket 或發(fā)送連接成功的通知,這是在 openObserver 適用于。

import { webSocket } from 'rxjs/webSocket';


const wsSubject = webSocket({
    url: 'ws://localhost:8081',
    openObserver: {
        next: () => {
            console.log('connetion ok');
        }
    },
});


//output
// connetion ok`

物產(chǎn)

屬性 類型 描述
url string 要連接的套接字服務器的URL
protocol string | Array<string> 用于連接的協(xié)議
resultSelector (e: MessageEvent) => T
serializer (value: T) => WebSocketMessage 一個序列化程序,用于從傳遞的值之前創(chuàng)建消息  消息發(fā)送到服務器。 默認為 JSON.stringify。
deserializer (e: MessageEvent) => T 一個反序列化器,用于從服務器到達套接字的消息  服務器。 默認為 JSON.parse。
openObserver NextObserver<Event> 一個觀察器,監(jiān)視基礎Web套接字上何時發(fā)生打開事件。
closeObserver NextObserver<CloseEvent> 當基礎 webSocket 上發(fā)生關閉事件時,觀察者會進行監(jiān)視
closingObserver NextObserver<void> 觀察者觀察由于什么原因?qū)⒁l(fā)生關閉  取消訂閱。
WebSocketCtor {    new (url: string, protocols?: string | string[]): WebSocket; } 要使用的 WebSocket 構(gòu)造函數(shù)。 這對于使用諸如  Node 中的 WebSocket 內(nèi)置(WebSocket 是 DOM API),或用于模擬 WebSocket  用于測試目的
binaryType 'blob' | 'arr
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號