codecamp

WebSocketSubjectConfig

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,如果我们 有兴趣的监听数据从正在添加服务器: deserializer, 这使我们可以在传递数据之前自定义数据的反序列化策略 到套接字客户端。 默认情况下 deserializer将应用于 JSON.parse每条消息 从服务器。

deserializer ,此属性的默认值为, JSON.parse但由于只有两个选项 对于传入数据,可以是文本或二进制数据。 我们可以应用自定义反序列化策略 或只是简单地跳过默认行为。

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 当出现错误时, 允许我们设置自定义错误。

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 ,假设我们需要先执行某种 init 任务,然后再将消息发送/接收到 webSocket 或发送连接成功的通知,这是在 openObserver 适用于。

import { webSocket } from 'rxjs/webSocket';


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


//output
// connetion ok`

物产

属性 类型 描述
url string 要连接的套接字服务器的URL
protocol string | Array<string> 用于连接的协议
resultSelector (e: MessageEvent) => T
serializer (value: T) => WebSocketMessage 一个序列化程序,用于从传递的值之前创建消息  消息发送到服务器。 默认为 JSON.stringify。
deserializer (e: MessageEvent) => T 一个反序列化器,用于从服务器到达套接字的消息  服务器。 默认为 JSON.parse。
openObserver NextObserver<Event> 一个观察器,监视基础Web套接字上何时发生打开事件。
closeObserver NextObserver<CloseEvent> 当基础 webSocket 上发生关闭事件时,观察者会进行监视
closingObserver NextObserver<void> 观察者观察由于什么原因将要发生关闭  取消订阅。
WebSocketCtor {    new (url: string, protocols?: string | string[]): WebSocket; } 要使用的 WebSocket 构造函数。 这对于使用诸如  Node 中的 WebSocket 内置(WebSocket 是 DOM API),或用于模拟 WebSocket  用于测试目的
binaryType 'blob' | 'arr
WebSocketSubject
TestScheduler
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

RxJS operators

RxJS fetch

RxJS testing

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }