我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue使用webSocket更新实时天气的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue使用webSocket更新实时天气的方法

前言

在 vue 中使用 webSocket 做一个简单的天气实时更新模块。

关于 webSocket 的操作及示例:

1.webSocket 连接

在这里插入图片描述

2.接收数据

在这里插入图片描述

3.重连机制

在这里插入图片描述

webSocket

1.关于 webSocket

webSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。浏览器通过 JavaScript 向服务器发出建立 webSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。


var Socket = new webSocket(url, [protocol] );

protocol 是可选的,指定了可接受的子协议

2.与 AJAX 轮的区别

现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。 这种传统的模式带来很 明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

HTML5 定义的 webSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

在这里插入图片描述

3.webSocket 事件

在这里插入图片描述

4. 一个简单的示例

通过上述简单介绍,我们来创建一个 webSocket 实例试一下:


function webSocketTest() {
    if ("webSocket" in window){
        alert("您的浏览器支持 webSocket!");
        // 打开一个 webSocket
        var ws = new webSocket("ws://localhost:8080/test");
        ws.onopen = function() {
            // webSocket 已连接上,使用 send() 方法发送数据
            ws.send("发送数据");
            console.log("数据发送中...");
        };
        
        ws.onmessage = function (evt) { 
            // 接收到的数据
            var data = evt.data;
            console.log("数据已接收...");
        };

        ws.onerror = function () {
            // 连接报错
            console.log('连接报错...');
        }

        ws.onclose = function() { 
            // 关闭 webSocket
            console.log("连接已关闭..."); 
        };
    } else {
        // 浏览器不支持 webSocket
        alert("您的浏览器不支持 webSocket!");
    }
}

可以看出,其实 webSocket 使用方法很简单:

1.判断浏览器是否支持 webSocket;
2.创建一个 webSocket 实例;
3.罗列 webSocket 事件并在相应事件中处理相应业务即可。

在vue中使用方法一样

天气更新

此处展示一下前面说过的天气实时更新效果实现。项目框架为 vue\element。

基础代码


<!-- 布局 使用的element,直接使用即可 -->
<el-popover
        placement="bottom"
        :title="weather.title"
        trigger="hover"
        :content="weather.cont">
    <div slot="reference" class="weather">
        <img :class="lazy" data-src="weather.url" alt="">
    </div>
</el-popover>

export default {
        data() {
            return {
                weather: {
                    cityName: '',
                    title: '--市/--℃',
                    cont: '--',
                    weatherCode: '0',
                    url: ''
                }
            }
        },
        methods: {
            // 获取天气
            async getTheWeather() {
                // 先通过接口请求一次当前天气状况
                let res = await this.$Http.getWeather({});
                if(res.code === 200) {
                    // 这里将接口获取到的天气数据放入 data 中的 weather 中即可
                    ...

                    // 然后打开 websocket 实时接收
                    this.connectWebSocket();
                }
            },
            // websocket
            connectWebSocket (){
                let _this = this;
                if ("WebSocket" in window) {
                    console.log("浏览器支持 WebSocket!");
                    // 打开一个 webSocket
                    let url ='xxxxxxxxxxx'; // 给你提供数据推送的地址
                    let ws = new webSocket(`ws://${url}`);
                    // 连接成功
                    ws.onopen = function () {
                        // Web Socket 已连接上,使用 send() 方法发送数据
                        ws.send("这是发送的测试数据");
                        console.log('连接成功');
                    };
                    // 接收数据处理
                    ws.onmessage = function (evt) {
                        let received_msg = evt.data;
                        // 这里将天气数据放入 data,然后天气就更新了
                        ...
                    };
                    // 连接报错
                    ws.onerror = function () {
                        console.log('连接报错...');
                    }
                    // 连接关闭
                    ws.onclose = function () {
                        // 关闭 websocket
                        console.log("连接已关闭...");
                    }
                } else {
                    // 浏览器不支持 WebSocket
                    console.log("您的浏览器不支持 WebSocket!");
                }
            },

        },
        mounted() {
            // 获取当地天气
            this.getTheWeather();
        }
    }

图片素材

天气图片信息最好跟后端商量好天气code值,这样直接取值替换就完事了。

在这里插入图片描述


this.weather.url = require(`@/assets/img/weather/${weatherInfo.weatherCode}@2x.png`);

重连机制

最后,介绍一种重连机制。

简单的重连机制,直接使用 setTimeout 即可。在连接报错/连接关闭时,使用定时器定时去重新执行 connectWebSocket 方法来重连即可。但是如此操作可能会存在多个问题,因此找到一种更加优雅的插件来重连——ReconnectingWebSocket。

ReconnectingWebSocket 其实就是封装的一个带有重连机制的 webSocketTest 实例,当连接断开时,会以一种友好的方式来尝试重新连接,直到连上为止。使用方法也比较简单,直接引入然后创建即可:


// 引入
import ReconnectingWebSocket from '@/util/ReconnectingWebSocket';

export default {
    data() {
        return {
            ...
        }
    },
    methods: {
        ...
        connectWebSocket() {
            let _this = this;
                if ("WebSocket" in window) {
                    console.log("浏览器支持 WebSocket!");
                    // 打开一个 webSocket
                    let url ='xxxxxxxxxxx'; // 给你提供数据推送的地址
-                   let ws = new webSocket(`ws://${url}`); // 扔掉
+                   let ws = new ReconnectingWebSocket(`ws://${url}`); // 改成这样
                    // 连接成功
                    ws.onopen = function () {
                        // Web Socket 已连接上,使用 send() 方法发送数据
                        ws.send("这是发送的测试数据");
                        console.log('连接成功');
                    };
                    // 接收数据处理
                    ws.onmessage = function (evt) {
                        ...
                    };
                    // 连接报错
                    ws.onerror = function () {
                        console.log('连接报错...');
                    }
                    // 连接关闭
                    ws.onclose = function () {
                        // 关闭 websocket
                        console.log("连接已关闭...");
                    }
                } else {
                    // 浏览器不支持 WebSocket
                    console.log("您的浏览器不支持 WebSocket!");
                }
        }
    }
}

ReconnectingWebSocket 是单个的JS文件,网上搜索即可。

到此这篇关于vue使用webSocket更新实时天气的方法的文章就介绍到这了,更多相关vue webSocket更新实时天气内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue使用webSocket更新实时天气的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

aspnet core使用websocket实时更新商品信息的方法

ASP.NETCore中使用WebSocket实时更新商品信息WebSocket是一种双向实时通信协议,非常适合在电子商务网站中更新商品信息。ASP.NETCore提供了WebSocket框架,用于创建WebSocket服务器并处理连接。通过推送消息,服务器可以主动向客户端发送更新,无需客户端请求。最佳实践包括考虑并发性、使用高效数据格式、实现重连机制,以及实施安全措施。通过使用WebSocket,企业可以创建实时商品信息更新系统,增强用户体验并确保客户了解最新信息。
aspnet core使用websocket实时更新商品信息的方法
2024-04-02

使用php开发Websocket,打造实时天气预报功能

使用PHP开发WebSocket,打造实时天气预报功能前言WebSocket是一种网络通信协议,它可以在客户端和服务器之间建立持久连接,实现双向的实时通信。在Web开发中,WebSocket被广泛应用于即时聊天、实时推送、实时数据更新等场景
使用php开发Websocket,打造实时天气预报功能
2023-12-18

如何使用golang的Websocket开发实时天气预报功能

如何使用Golang的WebSocket开发实时天气预报功能引言:天气预报是人们日常生活中的重要信息之一,实时的天气预报能够帮助人们做出更好的生活规划。本文将介绍如何使用Golang的WebSocket开发一个实时的天气预报功能,并提供具体
如何使用golang的Websocket开发实时天气预报功能
2023-12-18

PHP和WebSocket: 实现实时数据更新的最佳方法

PHP和WebSocket: 实现实时数据更新的最佳方法引言:随着网络技术的发展,实时数据更新在许多网站和应用程序中变得越来越重要。传统的HTTP请求-响应模式虽然可以实现数据的更新,但对服务器资源和带宽的利用率较低。相比之下,基于WebS
PHP和WebSocket: 实现实时数据更新的最佳方法
2023-12-17

Win10一周年更新版天气无法显示预报怎么办 Win10系统天气应用无法显示预报的解决方法

近日,微软发布了Win10一周年正式版(Win10 1607),但不少用户反馈升级Win10 1607一周年正式版后,遇到了天气应用无法显示预报的情况,这该怎么办呢?下面我们的小编就为大家解析下该问题。问题现象: 据反馈,fCxEdGy并不
2023-05-21

如何在golang中使用WebSocket进行实时数据更新

如何在Golang中使用WebSocket进行实时数据更新概述:WebSocket是一种为了在Web浏览器和服务器之间进行全双工通信而设计的通信技术。在Golang中,我们可以使用标准库中的net/http和github.com/goril
如何在golang中使用WebSocket进行实时数据更新
2023-12-18

Vue怎么使用Echarts实现横向柱状图并通过WebSocket即时通讯更新

这篇文章主要介绍“Vue怎么使用Echarts实现横向柱状图并通过WebSocket即时通讯更新”,在日常操作中,相信很多人在Vue怎么使用Echarts实现横向柱状图并通过WebSocket即时通讯更新问题上存在疑惑,小编查阅了各式资料,
2023-07-05

Android编程实现获取新浪天气预报数据的方法

本文实例讲述了Android编程实现获取新浪天气预报数据的方法。分享给大家供大家参考,具体如下: 新浪天气预报地址: http://php.weather.sina.com.cn/xml.phpcity=武汉&password=DJOYni
2022-06-06

vue父子组件传值不能实时更新的解决方法

Vue是一个以数据驱动、组件化的前端框架,其中组件化是Vue中较为重要的概念之一,组件之间的通信则成为Vue中较为普遍的需求,下面这篇文章主要给大家介绍了关于vue父子组件传值不能实时更新的解决方法,需要的朋友可以参考下
2023-05-20

使用yum更新时不升级Linux内核的方法介绍

本篇内容主要讲解“使用yum更新时不升级Linux内核的方法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用yum更新时不升级Linux内核的方法介绍”吧!RedHat/CentOS/Fe
2023-06-10

vue的异步数据更新机制与$nextTick使用方法是什么

这篇文章主要讲解了“vue的异步数据更新机制与$nextTick使用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的异步数据更新机制与$nextTick使用方法是什么”吧!v
2023-07-05

MFC定时发送实时更新数据的方法是什么

MFC(Microsoft Foundation Class)是一种用于Windows平台的C++应用程序框架,提供了一组类和函数来简化Windows应用程序的开发。在MFC中,可以使用定时器来定期触发某些操作,实现定时发送实时更新数据的功
2023-09-16

使用php获取几天后时间的方法

这篇文章主要介绍了使用php获取几天后时间的方法,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。php获取几天后时间的方法:首先创建一个PHP示例文件;然后通过“date("Y-m-d H:i:s",strtotime("
2023-06-15

编程热搜

目录