创建tinyDDP连接

tinyDDP连接是一种连接协议,创建连接要提供ip和port。

因为可以与多个仪器去进行连接,怎么管理多种连接。此文主要学习这种管理连接的模式,而不是ddp连接的细节。

1、client端发起连接

使用ip和port拼接一个url字符串,meteor.call方法调用server端的对应方法

let url = "http://" + this.ip + ":" + this.port + "/";
let res = await CommonMethods.meteorCall("connectDDP", url);

2、DDPManager类

server端,创建一个DDPManager实例。
DDPManager用来存储、管理DDPConnect 实例

import { DDPManager } from './DDPManager';
const _DDPManager = new DDPManager()

DDPManager类
getDDP方法,根据url去获取DDPConnect实例,如果没有就新建一个。这是一种常用并且很巧妙的模式,值得借鉴。

import { DDPConnect } from './DDPConnect';
export class DDPManager
{
  constructor()
  {
    this._DDPList = []
  }

  getDDP (url, eventHandle) {
    let ddpObj = this._DDPList.find(item => item.url === url)
    if (ddpObj === undefined) {
      ddpObj = {
        ddp: null,
        url: url
      }
      this._DDPList.push(ddpObj)
      ddpObj.ddp = new DDPConnect(url, eventHandle)
    }
    return ddpObj.ddp
  }
}

3、DDPConnect 类

DDPConnect实例是用来创建ddp连接的,里面包含创建连接的connect方法,发送命令的call方法等等;

4、被前端调用的connectDDP方法

  1. 先根据url从_DDPManager中获取到DDPConnect实例
  2. 查询DDPConnect实例的连接状态
  3. 如果连接状态是connected、connecting、connecting、waiting,就调用disconnect方法断开先
  4. 断开后再连接,并返回连接的结果
Meteor.methods({
 async connectDDP(url){
   let conn = _DDPManager.getDDP(url);
	let staus = conn.status();
	if (staus.status == 'connected' || staus.status == 'connecting' || staus.status == "offline" ||staus.status == 'waiting') {
			console.log('kisll')
			conn.disconnect()
		}
		return await conn.connect();
 },
 })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值