IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> ReactNative中使用WebSocket -> 正文阅读

[网络协议]ReactNative中使用WebSocket

首先说说发布订阅这种设计模式,这种模式我给它起了个别名叫遥控炸弹。很多朋友理解不了这种模式,那——

举个例子:
张三是个法外狂徒,它要去复仇,他想去炸掉仇家的房子。他来到仇家所在的小区,拿出自己准备的炸弹(监听)丢进仇家的屋里(页面),等他走出小区立马掏出遥控器(emit)按下爆炸按钮,复仇成功。

注意: 以上例子你可能会误解为炸弹只能爆炸一次,其实炸弹可以一直存在房子里,只要你不将他清理掉。所以张三完成复仇后,他应该去把炸弹清理掉,免得一直在屋子里,容易被警方发现。每个炸弹还应该有自己的名字(key),按爆炸开关的时候就可以精确引爆了。

export default class WSNetwork {
  constructor(msgHandler) {
    this.init();
    this.msgHandler = msgHandler;
  }

  init() {
    this.wssocket = null;
    this.serverUrl = "ws://127.0.0.1:3000/websocket";
  }

  connect() {
    this.wssocket = new WebSocket(this.serverUrl);

    this.wssocket.onopen = this.onOpen.bind(this);
    this.wssocket.onclose = this.onClose.bind(this);
    this.wssocket.onerror = this.onError.bind(this);
    this.wssocket.onmessage = this.onMessage.bind(this);

  }

  //打开连接
  onOpen() {
    console.log("WS_OPEN")
  }

  //关闭连接
  onClose() {
    console.log("WS_CLOSE")
  }

  //连接出错
  onError(e) {
    console.log("WS_ERROR::", e)
  }

  //接收消息
  onMessage(event) {
    this.msgHandler(event);
  }
}
const WS_LISTENER = 'WS_LISTENER'

export default class MessageProcess {
  static httpCallbacks = {}
  
  static msgListener = {}
  
  static addMsgListener(serviceId, callBack) {
    this.msgListener[serviceId] = callBack;
  }

  static emitData(msg) {
    this.msgListener[WS_LISTENER](msg)
  }

  static msgHandler(msg) {
    MessageProcess.emitData(msg)
  }

  static addHttpCallback(key, cbObj) {
    MessageProcess.httpCallbacks[key] = cbObj
  }


  static initListener() {
    MessageProcess.addMsgListener(WS_LISTENER, MessageProcess.onHttpCallBack)
  }


  static onHttpCallBack(msg) {
    const key = msg.key
    const callData = MessageProcess.httpCallbacks[key]

    callData.callback(msg)

    delete MessageProcess.httpCallbacks[key]
  }
}

import WSNetwork from "./WSNetwork";
import MessageProcess from "./MsgProcess";

export default class NetManager {
  static network = null
  static msgId = 1

  //初始化网络(在应用启动时调用)
  static initNetwork() {
    NetManager.network = new WSNetwork();
    MessageProcess.initListener();
  }

  //想server发送消息,应把NetManager.msgId传过去,server返回数据时再返回
  static sendMsg(msg) {
    return new Promise((resolve, reject) => {
      NetManager.network.wsSendMsg(msg)

      MessageProcess.addHttpCallback(NetManager.msgId++, {
        callback: (data) => {
          resolve(data)
        }
      })
    })
  }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-30 09:03:26  更:2022-04-30 09:04:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:51:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码