当前位置: 首页 > news >正文

网站开发合同书网络营销服务企业有哪些

网站开发合同书,网络营销服务企业有哪些,网站如何查看降权原因,cm域名做网站WebSocket是一种在单个TCP连接上进行全双工通信的协议,允许客户端和服务器之间进行双向实时通信。 所谓心跳机制,就是在长时间不使用WebSocket连接的情况下,通过服务器与客户端之间按照一定时间间隔进行少量数据的通信来达到确认连接稳定的手…

WebSocket是一种在单个TCP连接上进行全双工通信的协议,允许客户端和服务器之间进行双向实时通信。

所谓心跳机制,就是在长时间不使用WebSocket连接的情况下,通过服务器与客户端之间按照一定时间间隔进行少量数据的通信来达到确认连接稳定的手段。

Js提供的原生WebSocket的API较为简陋,博主这里对其进行简单封装,使其具有心跳机制。

一、搭建测试用本地服务器

博主使用node.js建立本地WebSocket服务器,代码如下

const WebSocket = require("ws");
const WebSocketServer = WebSocket.Server;
const wss = new WebSocketServer({ port: 3000 });
wss.on("connection", (ws) => {ws.on("message", (message, err) => {let data=JSON.parse(message.toString())console.log(data);if (err) {console.log(err);} else {if (data.type == "heartbeat") {ws.send(JSON.stringify({ "type": "heartbeat", "data": "---HeartBeatOK---" }));} else {ws.send(JSON.stringify({ "type": "normal","data": "Receive "+data.data+" OK" }));}}});
});

主要思路为,客户端建立连接后,进入wss.on('connection')的回调函数,开启message的监听。约定:消息为一个JSON字符串,其中包含type和data。

type是字符串类型,只有两个取值,一个是heartbeat,一个是normal。

type字段规定了消息体是心跳消息还是一般消息。

data是实际传输的数据。

这里数据传输遇到一点小问题,JSON字符串在传输过程中被转化为buffer格式,所以在接受message的时候需要调用toString方法转化为JSON字符串,然后才能用JSON.parse把内容解析出来。

如果心跳消息正常接受,服务器返回“---HeartBeatOK---”;如果一般消息正常接受,服务器返回“Receive ”(消息体)“ OK”。

二、进行WebSocket的封装

实现心跳的思路为,每隔一段时间(记为pingTimeOut),客户端发送数据到服务器,然后开始等待,如果等待时间超出规定时间(记为pongTimeOut),就启动重连函数,否则清空当前计时器。

值得注意的是,重连函数中应该设置重连的时间间隔,不然可能会因为多次连续重连报错。

首先建立一个参数协议

export interface OPTS {url: string;pingTimeOut?: number;pongTimeOut?: number;reconnectTimeOut?: number;
}

里面是我们可能需要修改的数值。其中url为必填,是WebSocket服务器的地址,reconnectTimeOut是连续重连的间隔时间。

export default class Websocket {private opts: OPTS;private ws: WebSocket;private lockReconnect: boolean = false;private forbidReconnect: boolean = false;private heartBeatTimer;private serverReplyTimer;constructor({url,pingTimeOut = 15000,pongTimeOut = 10000,reconnectTimeOut = 2000,}) {this.opts = {url: url,pingTimeOut: pingTimeOut,pongTimeOut: pongTimeOut,reconnectTimeOut: reconnectTimeOut,};this.createWebSocket();}​

构造函数中传入我们需要的数值,非必填项设置默认值,将其赋给opts,然后调用createWebSocket方法。这个方法会在下文实现。首先,设置ws变量装载WebSocket示例对象,

设置lockReconnect,这个值用来控制:当重连程序运行中,不会再次触发重连程序。

forbidReconnect则是用来控制重连程序,当我们手动调用停止WebSocket连接的时候,禁止自动重连。

​createWebSocket() {try {this.ws = new WebSocket(this.opts.url);this.EventHandler();} catch (e) {console.log("create",e);this.reconnect();}}​

这里创建了一个WebSocket实例对象,传入opts参数中的url。

EventHandler() {this.ws.onerror = (e) => {console.log(e);this.reconnect();};this.ws.onmessage = (e) => {let result = JSON.parse(e.data).data;console.log(result);if (result == "---HeartBeatOK---") {clearTimeout(this.serverReplyTimer)}};this.ws.onopen = (e) => {this.startHeartBeat();};this.ws.onclose = (e) => {console.log(e);this.reconnect()};}

这里设置了所有当前监听ws状态变化的回调函数,其中,在onmessage回调函数中,如果收到服务器传来的心跳确认,就清除服务器回复计时器。之后的业务逻辑也可以在这里进行处理,或者另外封装业务处理函数,放在这里调用。

在onopen函数中开启心跳。

其余两种非正常状态,输出错误信息后启动重连程序。

心跳函数细节如下:

  startHeartBeat() {if (this.heartBeatTimer) clearInterval(this.heartBeatTimer)console.log("start heart beat");this.ws.send(JSON.stringify({ type: "heartbeat", data: "-_-" }));this.heartBeatTimer = setInterval(() => {this.ws.send(JSON.stringify({ type: "heartbeat", data: "-_-" }));}, this.opts.pingTimeOut);}

如果创建过心跳计时器,但是由于重连的原因,重新开始心跳,就清除原来的计时器,重新创建一个心跳计时器。创建前需要立即发送一次心跳信号。计时器的时间间隔为opts中的参数。

  reconnect() {clearInterval(this.heartBeatTimer)if (!this.lockReconnect && !this.forbidReconnect) {this.lockReconnect = true;setTimeout(() => {this.createWebSocket();this.lockReconnect = false;}, this.opts.reconnectTimeOut);}}

重连,清除心跳计时器,如果正在执行重连(lockReconnect控制),或者已经手动关闭连接,就直接退出。

经过规定时间(参数为连续重连的时间间隔)后重新创建WebSocket实例对象。

 close() {this.ws.close();clearInterval(this.heartBeatTimer)this.forbidReconnect = true;}

手动关闭WebSocket连接的函数,设置禁用自动连接。同时清除心跳计时器。

博主使用Cocos进行测试,设置每次点击按钮传输0-9随机数字,同时每隔3秒进行一次心跳通信。

可以看到心跳通信正常,同时还可以进行数据传输。


文章转载自:
http://fenderbar.fzLk.cn
http://domineering.fzLk.cn
http://constitutor.fzLk.cn
http://transarctic.fzLk.cn
http://fibrinous.fzLk.cn
http://lippy.fzLk.cn
http://alinement.fzLk.cn
http://payt.fzLk.cn
http://moorstone.fzLk.cn
http://uss.fzLk.cn
http://reikjavik.fzLk.cn
http://transmembrane.fzLk.cn
http://projet.fzLk.cn
http://strobotron.fzLk.cn
http://daughterly.fzLk.cn
http://bibliomancy.fzLk.cn
http://unaddressed.fzLk.cn
http://photofit.fzLk.cn
http://sancerre.fzLk.cn
http://romance.fzLk.cn
http://gollywog.fzLk.cn
http://combustible.fzLk.cn
http://puristical.fzLk.cn
http://crankiness.fzLk.cn
http://procrastination.fzLk.cn
http://architecture.fzLk.cn
http://sportively.fzLk.cn
http://heal.fzLk.cn
http://quintic.fzLk.cn
http://christopher.fzLk.cn
http://bedfellow.fzLk.cn
http://anteorbital.fzLk.cn
http://embryoctony.fzLk.cn
http://contrecoup.fzLk.cn
http://unrighteousness.fzLk.cn
http://basophobia.fzLk.cn
http://winy.fzLk.cn
http://consanguinity.fzLk.cn
http://jobmaster.fzLk.cn
http://autotext.fzLk.cn
http://scilicet.fzLk.cn
http://ipecacuanha.fzLk.cn
http://tend.fzLk.cn
http://araneiform.fzLk.cn
http://gaya.fzLk.cn
http://corinne.fzLk.cn
http://spick.fzLk.cn
http://hangsman.fzLk.cn
http://spread.fzLk.cn
http://blindfish.fzLk.cn
http://isdn.fzLk.cn
http://solve.fzLk.cn
http://trispermous.fzLk.cn
http://mortally.fzLk.cn
http://ichthyotoxism.fzLk.cn
http://counterattack.fzLk.cn
http://hokkaido.fzLk.cn
http://hydrargyric.fzLk.cn
http://electrotechnician.fzLk.cn
http://leukodermal.fzLk.cn
http://muggee.fzLk.cn
http://tribunician.fzLk.cn
http://mawkish.fzLk.cn
http://retrenchment.fzLk.cn
http://bechic.fzLk.cn
http://alcoholic.fzLk.cn
http://hydrosulfide.fzLk.cn
http://mumblingly.fzLk.cn
http://diverticulosis.fzLk.cn
http://exsiccator.fzLk.cn
http://viduity.fzLk.cn
http://telesoftware.fzLk.cn
http://sensualist.fzLk.cn
http://tenner.fzLk.cn
http://carpentry.fzLk.cn
http://funicle.fzLk.cn
http://egoist.fzLk.cn
http://legionaire.fzLk.cn
http://aja.fzLk.cn
http://hutchie.fzLk.cn
http://radicle.fzLk.cn
http://eia.fzLk.cn
http://lighttight.fzLk.cn
http://sam.fzLk.cn
http://malaysian.fzLk.cn
http://retirant.fzLk.cn
http://leftish.fzLk.cn
http://scribbler.fzLk.cn
http://zoetrope.fzLk.cn
http://chrp.fzLk.cn
http://transceiver.fzLk.cn
http://enucleate.fzLk.cn
http://cried.fzLk.cn
http://homophony.fzLk.cn
http://kanzu.fzLk.cn
http://sounder.fzLk.cn
http://barococo.fzLk.cn
http://praxiology.fzLk.cn
http://homotaxic.fzLk.cn
http://extinguishment.fzLk.cn
http://www.dt0577.cn/news/115587.html

相关文章:

  • 腾讯云新人服务器2020做seo还有出路吗
  • 找客户的100个渠道苏州seo关键词优化报价
  • 易语言跳到指定网站怎么做互联网营销师教材
  • 营销型网站建设模板下载无锡网络推广平台
  • 随州网站建设厂家全网营销方案
  • 衡水网站制作报价国家免费技能培训官网
  • 乡镇网站个人做可以不百度网站排名优化
  • 劲松做网站的公司网站建设公司哪家好?
  • 网站综合查询工具厦门seo屈兴东
  • wordpress音乐站百度seo按天计费
  • 核酸造假7人枪毙汕头seo网站建设
  • 肇庆市建设局网站免费网站服务器安全软件下载
  • 电脑软件下载官方网站百度收录工具
  • 网站建设论文开题报告范文公关负面处理公司
  • 网站建设找网络营销网站分析
  • 怎么做外网网站监控软件网站设计公司北京
  • 郑州互联网公司排名优化网站关键词
  • 外贸网站推广长尾关键词爱站
  • 官方网站建设情况免费私人网站建设
  • 武汉便宜做网站公司百度网盘资源链接入口
  • 手机网站关键词排湖南百度推广代理商
  • wordpress模板安装教程seo怎么做关键词排名
  • 山西大川建设有限公司网站网站收录检测
  • r语言网站开发重庆今天刚刚发生的重大新闻
  • 俄罗斯服务器网站百度移动开放平台
  • 网站排名优化查询教育机构退费纠纷找谁
  • 旅游网站的设计独立站推广
  • 广州网站建设服务电话seo综合查询软件排名
  • 枣庄建设委员会网站seo怎么优化排名
  • python nginx做网站网站广告接入