首页 文章 精选 留言 我的

精选列表

搜索[快速],共10000篇文章
优秀的个人博客,低调大师

windows下更新环境变量不需要重启系统快速生效的方法(原理篇)

本方式是针对windows的环境变量进行了修改,但是不希望重启windwos系统的解决方法以及原理的一些简单的介绍。 要了解和深入一件事我觉得应该是了解的全面一些比较的好,所以我这里写的比较的多,如果不需要可以直接到红色标记处直接看解决方法。 如果要分析这个问题需要了解几个概念 什么是环境变量 百科的结果是:一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。虽然很官方,但是我觉得已经很通俗,不需要在解释了。 如何设置环境变量 根据以上的概念我们知道,环境变量就是操作系统运行环境的一些变量参数,既然是变量,肯定是可以变的,所以按照我的图片进行设置window7系统的环境变量,其他系统可以参考具体系统的操作方法。如图: 设置环境变量的作用 作为开发,一般主要是因为我们安装了一个新的软件或者是功能,需要使用命令行来测试是否安装成功,例如 : java -version 显示的是java的jdk版本和其他的信息 一般安装软件执行这个命令的时候会出现如下的报错: 这个提示信息很清楚,就是提示mvn这个程序不存在,但是我们确认已经安装好了这个软件,那为什么还是会这样呢,主要是因为在dos窗口执行命令的时候,会根据我们的环境变量中的path来查找相应的命令,但是一般情况下path设置的是系统的核心目录,所以我们新安装的软件目录不在系统的环境变量中,所以会出现dos在path下找不到对应的程序,所以会出现上面的报错。 为了解决这个问题,有两种方法,1是cd(当然也可以进行拖拽到dos中)到相应的安装目录,找到这个程序,然后执行如图: 这样的话我们每一次都需要cd到这个目录去,我觉得大多数人都不喜欢这样吧。 另一种方法就是像系统自带的命令一样,比如ping 命令,那怎么做到呢,那就是设置环境变量,所以我们可以通过设置软件的安装目录到系统的path变量中。 但是这个会有一个问题,就是需要我们的系统重启,环境变量才可以生效,这样的话我们有时是无法接受的。 不重启系统,实现环境变量的生效; 使用windos+r打开dos窗口,执行如下: 我们可以看到我们设置的path生效了,系统的默认属性也木有了,是不是很郁闷啊,不用担心,这个暂时解释为系统缓存的关系以后会详细的介绍更深层次的。 这个时候我们需要的是重新打开一个dos界面,再次执行java -verion,这次的显示正常了。 我们echo %path% 发现环境变量生效了,。 。。。。目的达到了,但是原因是什么呢。 我先简单的介绍一下,以后我会详细的整理的。 系统的环境变量通俗点讲就是系统的配置信息;就比如在我们的平时开发过程中,我们的配置文件一般都是一次加载,然后被缓存的,如果要修改配置信息,一般都是需要重启应用,操作系统也是如此,那刚才我们的dos窗口为什么输出的path是我们设置的值啊,主要是系统提供了一个设置环境变量的命令 set,打开一个dos窗口进行设置,那这个dos程序的当前环境变量就会变成刚刚设置的,由于当前的环境变量是全局变量的一个副本,所以相对于系统总的配置来说,这个配置信息改变了,操作系统的内部机制会重新刷新的现在配置文件,所以当我们再次打开dos窗口运行的时候,就会发现我们的path设置生效了,大致的原因通俗讲就是这样,可能有些概念不是很专业或准确,以后我会单独更新加载进来的 ————————————————

优秀的个人博客,低调大师

IoT 设备免烧录三元组,基于MQTT动态注册身份,快速上云方案

背景 物联网场景中,设备产线烧录不同三元组成本很高,Android设备更是无法独立烧录三元组,IoT 存量设备迁移更是无法预置身份三元组,面对这种场景,IoT物联网平台提供了无需预注册三元组,在设备运行时通过MQTT动态注册,获取认证信息,再发起设备业务连接的方案。 安全提示 对于一型一密免预注册方式,请在设备端使用4.X版C SDK。该SDK包含DAS(设备取证服务),可以对设备可能产生的安全事件进行风控。物联网平台不承担因设备端没有使用该SDK而导致的安全风险。 流程图 设备动态注册三元组流程如下: 开发实战 创建产品 我们接入 IoT 物联网平台,注册一个新产品:Android设备。进入产品详情,获取productKey和productSecret。开启动态注册功能,如下图: 接下来,我们无需按常规流程,在控制台注册设备,而是直接开发设备端程序。 设备端开发 我们以Node.js代码演示设备动态注册原理。 动态注册 设备发送CONNECT报文,报文中包含动态注册参数,请求建立连接。• MQTT连接域名:公共实例的连接域名为${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com:1883。MQTT动态注册的CONNECT报文参数和取值结构如下: mqttClientId: clientId+"|securemode=2,authType=regnwl,random=xxxx,signmethod=xxx|" mqttUserName: deviceName+"&"+productKey mqttPassword: sign_hmac(productSecret,content) • mqttClientId组成结构:clientId+"|securemode=2,authType=regnwl,random=xxxx,signmethod=xxx|"参数取值中包含的详细参数如下表。 • mqttUserName组成结构:deviceName+"&"+productKey示例:device1&al123456789。• mqttPassword计算方法:sign_hmac(productSecret,content)其中,content的值是拼接串("deviceName"+device1+"productKey"+al123456789+"random"+123456)hmac_sha1(h1nQFYPZS0mW2352, deviceNamedevice1productKeyal123456789random123) 免预注册认证方式,设备注册成功后,物联网平台使用Topic:/ext/regnwl,返回ClientID、DeviceToken。IoT 物联网平台推送的设备身份消息Payload格式如下: { "productKey" : "xxx", "deviceName" : "xxx", "clientId" : "xxx", "deviceToken" : "xxx" } 动态注册示例代码: function doDeviceRegister() { // 1.产品信息 const productInfo = { productKey: "产品 productKey", productSecret: "产品 productSecret", regionId: "cn-shanghai" } // 2.程序读取的设备唯一标识,比如 MAC,Serial Number 等 productInfo.deviceName = Math.random().toString(36).substr(2) // 3.生成设备动态注册的参数 var options = getRegisterOptions(productInfo, trustedCA); // 4.发起动态注册,获取设备连接 clientId 和 deviceToken var registerClient = mqtt.connect(options); registerClient.on('message', function(topic, message) { // 5. 解析注册结果 if ('/ext/regnwl' == topic) { // 6.断开注册连接 registerClient.end(); // 7.发起设备 MQTT 连接 //deviceOnline(JSON.parse(message),"cn-shanghai") } }) } 生成设备动态注册的参数参考文档: https://help.aliyun.com/document_detail/132111.html function getRegisterOptions(productInfo, rootCA) { var random = Date.now(); var content = { deviceName: productInfo.deviceName, productKey: productInfo.productKey, random: random } var options = {} options.clientId = Date.now() + "|securemode=2,authType=regnwl,random=" + random + ",signmethod=hmacsha1|" options.username = productInfo.deviceName + "&" + productInfo.productKey options.password = signHmacSha1(content, productInfo.productSecret) options.port = 1883; options.host = `${productInfo.productKey}.iot-as-mqtt.${productInfo.regionId}.aliyuncs.com`; options.protocol = 'mqtts'; options.ca = rootCA options.keepalive = 120 return options; } 动态注册成功后,产品下会设备数量会更新: 设备在线和上报数据 设备收到并保存ClientID和DeviceToken的组合,断开当前MQTT连接,发起设备直连IoT平台的请求的CONNECT参数如下: mqttClientId: clientId+"|securemode=-2,authType=connwl|" mqttUsername: deviceName+"&"+productKey mqttPassword: deviceToken • mqttClientId:设备动态注册时获得的ClientID拼接固定字符串。• mqttUserName:组成结构:deviceName+"&"+productKey示例:device1&al123456789。• mqttPassword:设备动态注册时获得的DeviceToken实例代码: function deviceOnline(opts,regionId) { // 设备 MQTT 连接参数 var options = {} options.clientId = opts.clientId + "|securemode=-2,authType=connwl|" options.username = opts.deviceName + "&" + opts.productKey options.password = opts.deviceToken options.port = 1883 options.host = `${opts.productKey}.iot-as-mqtt.${regionId}.aliyuncs.com` options.protocol = 'mqtt' options.keepalive = 120 // 设备建立 MQTT 连接 var deviceClient = mqtt.connect(options); // 上报业务数据 deviceClient.publish(`/${opts.productKey}/${opts.deviceName}/user/update`, "sdk client " + Date.now(), { qos: 1 }); } 在控制台可以看到设备在线,并展示ClientID信息,如下: 【往期回顾】 1、39张IoT传感器工作原理GIF图汇总2、IoT 设备发送 MQTT 请求的曲折经历3、20元体Arduino 环境监测仪开发4、智能手持测温枪开发实践5、JMeter 压测 MQTT 服务性能实战

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册