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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【前端通讯】WebSocket和EventSource实践: -> 正文阅读

[网络协议]【前端通讯】WebSocket和EventSource实践:

WebSocket:

 this.socket = DashboardService.getWsPermissionEvent();
      this.socket.onopen = (e) => {
        console.log('-------websocket channel opened-------');
      };
      // 监听socket错误信息
      this.socket.onerror = (e) => {
        console.log('-------websocket channel error-------',e);
      };
      // 监听socket消息userUpdateTypeList
      this.socket.onmessage = (response) => {
        let socketRes = JSON.parse(response.data)
        if (socketRes.code === '200' && !JSON.parse(localStorage.getItem('hasNotify'))&&socketRes['userUpdateTypeList']) {            
           // ...............              
            //this.$notify.info({
		// 	title: `${this.$t('userInfoChange')}`,
		// 	dangerouslyUseHTMLString: true,
		// 	showClose: false,
		// 	message: createElement('p', null, [
		// 		`${this.$t('userInfoChangeDes')}`,
		// 		createElement('p', [
		// 			createElement('el-button', { style: { float: 'right', margin: '0 5px' }, attrs: { size: 'mini', type: 'info' }, on: { click: this.nofityCancel } }, `${this.$t('cancel')}`),
		// 			createElement('el-button', { style: { float: 'right' }, attrs: { size: 'mini', type: 'primary' }, on: { click: this.nofityConfirm } }, `${this.$t('confirm')}`),
		// 		]),
		// 	]),
		// 	duration: 0,
		// });         
        } else if (socketRes && socketRes.code === '500') {
            //...............
        }
      }
 
public getWsPermissionEvent() {
    const headers: any = initHeaders();
    const socket = new WebSocket('ws://' + location.host + '/edsp/websocket-connection' + '?token=' + headers.token);
    return socket;
  }

EventSource:

1.初始化事件源,指定一个接受事件的URL:

var evtSource = new EventSource("/sendMessage");

2.监听消息:

//收到服务器发生的事件时触发
evtSource.onmessage = function (e) {
    console.log(e.data);
}
//成功与服务器发生连接时触发
evtSource.onopen = function () {
    console.log("Server open")
} 
//出现错误时触发
evtSource.onerror = function () {
    console.log("Error")
} 

 //自定义事件
evtSource.addEventListener("myEvent", function (e) {
    console.log(e.data);
}, false)

3.封装:
服务器端nodejs实现:
把报头 “Content-Type” 设置为 “text/event-stream”
字段:每个事件之间通过空行来分隔。
字段为空白,表示该行是注释,会在处理时被忽略。
event: 表示该行用来声明事件的类型。浏览器在收到数据时,会产生对应类型的事件。
data: 消息的数据字段。如果该条消息包含多个data字段,则客户端会用换行符把它们连接成一个字符串来作为字段值。
id: 事件ID,会成为当前EventSource对象的内部属性"最后一个事件ID"的属性值。
retry: 一个整数值,指定了重新连接的时间(单位为毫秒),如果该字段值不是整数,则会被忽略.

var http = require('http');
var fs = require('fs');

http.createServer(function (req, res) {
    if(req.url === '/sendMessage') {
        res.writeHead(200, {
            "Content-Type": "text/event-stream" //设置头信息
        });

        setInterval(function () {
            res.write(
                //事件一
                "data:" + new Date().toLocaleTimeString() + "\n\n" + //必须“\n\n”结尾
                //事件二
                ": '这是注释!'" + "\n" +
                "event: myEvent" + "\n" + 
                "data:" + new Date().toLocaleString() + "\n\n"
            );
        }, 1000);
    } else {
        fs.readFile('./index.html', function (err, content) {
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.end(content, 'utf-8');
        });
    }

}).listen(3000);
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:36:22  更:2021-09-18 10:37:09 
 
开发: 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年6日历 -2024/6/27 1:53:08-

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