博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
双向通信之Comet
阅读量:7008 次
发布时间:2019-06-28

本文共 1116 字,大约阅读时间需要 3 分钟。

Comet是一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无须客户端发出请求,当前有三种实现方式,轮询 长轮询和iframe流。

轮询

客户端和服务器之间一直进行连接,每隔一段时间就询问一次

特点: 这种方式连接数会很多,一个接受,一个发送。而且每次发送请求都会有Http的Header,会很耗流量,也会消耗CPU的利用率

    
复制代码

server.js

let express = require('express');let app = express();app.use(express.static(__dirname));app.get('/clock', (req,res) => {    res.header('Access-Control-Allow-Origin', 'http://localhost:8000');    res.end(new Date().toLocaleTimeString());});app.listen(8000);复制代码

长轮询

在打开一条连接以后保持,等待服务器推送来数据再关闭的方式。

特点: 这种方式在某种程度上减小了网络带宽和CPU利用率等问题。但由于http数据包的头部数据量往往很大(通常有400多个字节),真正被服务器需要的数据却很少(有时只有10个字节左右),这样的数据包在网络上周期性的传输,难免对网络带宽是一种浪费

复制代码

iframe流

在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间创建一条长链接,服务器向iframe传输数据(通常是HTML,内有负责插入信息的javascript),来实时更新页面。

特点: 浏览器兼容好

复制代码

server.js

const express = require('express');const app = express();app.use(express.static(__dirname));app.get('/clock', function (req, res) {    res.header('Content-type', 'text/html');    setInterval(function () {        res.write(``); // 如果使用res.send()则返回数据给客户端同时关闭连接    }, 1000);});app.listen(8000);复制代码

转载于:https://juejin.im/post/5cd0fa9ee51d456e5977b230

你可能感兴趣的文章
AscII表
查看>>
BASE64图片转字符串
查看>>
springboot-国际化
查看>>
C11中替代gets()的函数
查看>>
[转]水晶报表自动补空行及格线(无分组版)
查看>>
PHP里用户密码的回复和管理
查看>>
jqprint导入jqgrid表格时,内容溢出的原因以及解决方法
查看>>
IOS self.使用
查看>>
POJ1151 Atlantis
查看>>
UltraEdit编辑器使用心得之正则表达式篇
查看>>
dnspod 批量添加记录
查看>>
ZCMU训练赛-H(模拟)
查看>>
Codeforces Round #449 (Div. 2) A. Scarborough Fair【多次区间修改字符串】
查看>>
CCCC L1-039. 古风排版【图形输出/循环控制行列/模拟/细节】
查看>>
POJ 1182 食物链 【带权并查集/补集法】
查看>>
V字形
查看>>
Flask学习笔记(3)-数据库迁移
查看>>
Hbase常用操作
查看>>
一行命令学会全基因组关联分析(GWAS)的meta分析
查看>>
第二阶段冲刺——six
查看>>