WebSocketSubjectConfig

2020-10-09 14:27 更新

WebSocketSubjectConfig 是一个普通的对象,它使我们能够 webSocket 可配置。

  1. interface WebSocketSubjectConfig<T> {
  2. url: string
  3. protocol?: string | Array<string>
  4. resultSelector?: (e: MessageEvent) => T
  5. serializer?: (value: T) => WebSocketMessage
  6. deserializer?: (e: MessageEvent) => T
  7. openObserver?: NextObserver<Event>
  8. closeObserver?: NextObserver<CloseEvent>
  9. closingObserver?: NextObserver<void>
  10. WebSocketCtor?: {...}
  11. binaryType?: 'blob' | 'arraybuffer'
  12. }

描述

提供灵活性 webSocket

它定义了一组属性以提供特定的自定义行为 套接字生命周期的时刻。 连接打开后,我们可以 使用 openObserver中,当连接关闭 closeObserver,如果我们 有兴趣的监听数据从正在添加服务器: deserializer, 这使我们可以在传递数据之前自定义数据的反序列化策略 到套接字客户端。 默认情况下 deserializer将应用于 JSON.parse每条消息 从服务器。

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

  1. import { webSocket } from 'rxjs/webSocket';
  2. const wsSubject = webSocket({
  3. url: 'ws://localhost:8081',
  4. //Apply any transformation of your choice.
  5. deserializer: ({data}) => data
  6. });
  7. wsSubject.subscribe(console.log);
  8. // Let's suppose we have this on the Server: ws.send("This is a msg from the server")
  9. //output
  10. //
  11. // This is a msg from the server

序列化程序 允许我们使用自定义序列化策略,但对于传出消息

  1. import { webSocket } from 'rxjs/webSocket';
  2. const wsSubject = webSocket({
  3. url: 'ws://localhost:8081',
  4. //Apply any transformation of your choice.
  5. serializer: msg => JSON.stringify({channel: "webDevelopment", msg: msg})
  6. });
  7. wsSubject.subscribe(() => subject.next("msg to the server"));
  8. // Let's suppose we have this on the Server: ws.send("This is a msg from the server")
  9. //output
  10. //
  11. // {"channel":"webDevelopment","msg":"msg to the server"}

closeObserver 当出现错误时, 允许我们设置自定义错误。

  1. import { webSocket } from 'rxjs/webSocket';
  2. const wsSubject = webSocket({
  3. url: 'ws://localhost:8081',
  4. closeObserver: {
  5. next(closeEvent) {
  6. const customError = { code: 6666, reason: "Custom evil reason" }
  7. console.log(`code: ${customError.code}, reason: ${customError.reason}`);
  8. }
  9. }
  10. });
  11. //output
  12. // code: 6666, reason: Custom evil reason

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

  1. import { webSocket } from 'rxjs/webSocket';
  2. const wsSubject = webSocket({
  3. url: 'ws://localhost:8081',
  4. openObserver: {
  5. next: () => {
  6. console.log('connetion ok');
  7. }
  8. },
  9. });
  10. //output
  11. // 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
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号