• 关于

    js系统函数

    的搜索结果

回答

1、Box()是JS函数,JS函数是JS的一种对象,Box是指向对象的指针。2、使用prototype给Box()函数添加原型属性,原型属性跟实例属性是完全不同的内容,设置原型属性的目的是为了将同一对象不同实例的公有方法和属性封装起来,以节省内存空间。因此,这些行为的执行在实例化构造函数之前,或者说,不管是否实例化,这些代码都会在后台执行。3、原型的目的就是为了在实例化同一对象不同时节省内存空间,如果box1、box2的country和race都是一样的,就没必要将这两个属性放在实例化构造函数中进行实例化,因为这样的话box1、box2都各自保存了一份country和race,但它们的内容都一样,这样就浪费了宝贵的系统资源(内存资源),如果实例化了一个对象box,那它的可访问的属性包含两种,一种是实例化属性,在Box构造函数中定义,另一种是原型属性,通过prototype定义,

小旋风柴进 2019-12-02 02:14:01 0 浏览量 回答数 0

问题

什么是函数计算错误的类型

boxti 2019-12-01 21:48:09 1310 浏览量 回答数 0

问题

函数计算

黄一刀 2020-04-04 03:07:45 80 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

回答

背景 目前有很多 web 应用是基于 express 框架写的,这样的 web 应用按照传统的部署方式可能部署在云主机上,用户可能不想购买云主机,也不想在运维上投入太多成本,函数计算是一个不错的选择,函数计算的入口方法如何适配 express 是一个相当复杂的问题,我们需要适配 http 触发器和 API 网关这两种类型的触发,但是这两种类型的函数方法签名是不一样的,我们需要分别做适配,比如 API 网关方式触发函数,需要把 event 映射到 express 的 request 对象上,而 express 的 response 对象需要映射到 callback 的数据参数上。具体细节可以参考另一篇文章:移植 express.js 应用到函数计算。 现在,我们提供了一个模板,通过该模板,可以快速将 express 项目接入函数计算,不管你的函数希望通过 http 触发器,还是 API 网关触发。并且,该模板还支持 es6 代码编译成 es5,并且剪切打包压缩成一个 js 文件。 快速开始 安装 node curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash nvm install 8 安装 fun 工具 npm install @alicloud/fun -g fun 工具的某些子命令可能会用到 docker,所以你需要安装好 docker,具体参考文档:Fun 安装教程。 通过 fun 模板生成项目 fun init -n demo https://github.com/muxiangqiu/fc-express-nodejs8.git 项目生成好后,在根目录下有个 README.md 文件,阅读该文件可以帮你快速了解项目骨架为你做了什么,以及相关的命令。具体详情:README.md。 安装依赖 cd demo # 切换到项目根下面,后面的所有命令,都是在项目根下面执行 npm install 注意:有少数特殊 npm 模块的安装可能会依赖当前系统环境,为了能正确安装函数运行时的系统环境的 npm 模块,可以通过 fun install 命令来实现,比如 puppeteer,具体参考:开发函数计算的正确姿势 —— 安装第三方依赖。 编译 生产编译 npm run build 开发编译(这种编译方式不会进行代码混淆,并且生成 source map 信息,方便开发调试) npm run dev 本地运行函数 fun local start 运行调试函数 运行调试之前,请先用 npm run dev 命令编译源码,然后以调试的方式运行函数: fun local start -d 3000 如下图所示:debug_fc_http 部署函数到云端 部署函数的时候需要用到 AK 等下信息,可以通过 fun config 来配置,如果配置过请忽略,部署函数命令如下: fun deploy 小结 通过该模板,我们可以快速让 express 在函数计算上运行起来,你的原生请求的 headers 或者 body 都会透传给你的 express 应用,你不用关心是如何透传过去的,这些对你来说都是透明的,你只需要按照 express 标准方式写你的业务代码即可。如果你想要了解更多底层实现原理,可以参考另一篇文章:移植 express.js 应用到函数计算。

1934890530796658 2020-03-27 17:34:49 0 浏览量 回答数 0

回答

网页端常用:requestAnimationFrame, setInterval, setIimeoutnode端常用:nextTick,setImmediate,setIimeout,setIntervalsetIimeout,当时间达到后,有机会就执行setInterval,按照指定间隔后把回调函数加入任务队列,js会逐个执行setImmediate,任务队列执行完成后马上运行指定代码nextTick,生成更细颗粒度的任务加入微任务队列,微任务队列优先级高于普通任务队列,在两个队列都有值的情况下,优先执行微任务队列requestAnimationFrame,与setTimeout相比requestAnimationFrame最大的优势是由系统来决定回调函数的执行时机,它能保证回调函数在屏幕每一次的刷新间隔中只被执行一次,这样就不会引起丢帧现象,常用于动画场景

见建 2019-12-02 01:39:07 0 浏览量 回答数 0

问题

函数计算怎么 创建函数

boxti 2019-12-01 21:48:01 1060 浏览量 回答数 0

回答

概述 Aliyun Serverless VSCode Extension 是函数计算提供的 VSCode 插件,该插件结合了 函数计算 Fun 工具 以及 函数计算 SDK ,是基于 VSCode 的开发调试部署工具。 通过该插件,您可以: 快速地在本地初始化项目、创建函数 运行、调试本地函数(调试功能目前支持 Node.js、Python、Php) 拉取云端的服务函数列表,执行云端函数 部署服务函数至云端,并更新相关配置 前提条件 前置操作 如果您期望使用 Aliyun Serverless VSCode Extension 的所有功能,那么您需要确保系统中有以下组件: VSCode:在 Visual Studio Code 官网 中可以下载安装 函数计算 Fun 工具以及 Docker:可以在 aliyun/fun 中根据教程安装配置 Fun 以及 Docker 安装插件 打开 VSCode 并进入插件市场。 在插件市场中搜索 “Aliyun Serverless”,查看详情并安装。 重启 VSCode,左侧边栏中会展示已安装的 Aliyun Serverless VSCode Extension 插件。 操作步骤 绑定阿里云账户 打开左侧 Aliyun Serverless VSCode Extension,单击绑定阿里云账户的按钮。 绑定阿里云账户 依次输入阿里云 Account ID,阿里云 Access Key ID,阿里云 Access Key Secret,账户本地名称。 绑定阿里云账户弹窗 绑定完成后,可以看到所绑定的阿里云账户的云端服务与函数列表。 绑定阿里云账户结果 您可以通过切换区域 Region 来查看不同区域的服务与函数。单击云端资源面板的切换区域按钮。 切换区域 创建函数 通过 VSCode,打开一个空的目录文件。单击本地资源面板中的创建函数按钮,可以在本地初始化一个函数计算项目。 创建函数 按照导航依次输入或选择服务名称、函数名称、函数运行时、函数类型。填写完毕后,插件会自动创建函数并在本地资源面板中会展示新建的本地服务与函数。 创建函数结果 Tips:您也可以直接单击本地资源面板中服务名右侧的创建函数按钮,来为该服务创建函数。按照导航依次输入或选择函数名称、函数运行时、函数类型即可。 服务创建函数 本地调试函数 在本地资源面板中,单击函数名称右侧的调试按钮或 Handler 文件中的调试链接,可以在本地调试该函数。 本地调试函数 在代码文件中插入断点,启动调试后即可看到调试信息。 本地调试函数结果 插件会为您在函数入口文件同目录下创建 event.dat 文件,您可以通过修改该文件设置每次调试函数时触发的事件信息。 注意: 若您想要调试 python 2.7 或 python 3 runtime 的函数,需要事先在插件安装 Python 插件。 若您想调试 php runtime 的函数,需要事先在插件安装 PHP Debug 插件。 本地调用函数 在本地资源面板中,单击函数名称右侧的执行按钮或 Handler 文件中的执行链接,可以在本地调用该函数。 本地调用函数 函数的日志以及结果会输出在 Terminal 中。 本地调用函数结果 插件会为您在函数入口文件同目录下创建 event.dat 文件,您可以通过修改该文件设置每次调用函数时触发的事件信息。 本地调用修改事件输入 部署服务以及函数 单击本地资源面板中的部署按钮,可以将本地的服务与函数部署到云端。 部署服务以及函数 部署完成后,单击云端资源面板中的刷新按钮,可以查看部署到云端的服务与函数。 部署服务以及函数结果 执行云端函数 单击云端资源面板中函数右侧的执行按钮,可以执行云端函数。 执行云端函数 函数的日志以及结果会输出在 Output 中。 执行云端函数结果 插件会为您在项目根目录下创建 event.dat 文件,您可以通过修改该文件设置每次调用云端函数时触发的事件信息。 云端测试 您可以登录 控制台 ,对应查看是否部署成功。 登录 函数计算控制台,选择您在初始化 VSCode 插件时配置的地区,单机左侧导航栏 【服务-函数】 找到名为 demo01 的服务与名为 testFunc01 的函数,点击进入,即可在控制台查看并执行函数 进入函数并点击 【执行】,即可在控制台执行函数 查看日志 每次执行完毕,可以在当前页面查看本次执行日志,如果需要查看历史执行日志,可以点击【日志查询】,这需要您为函数配置日志仓库,请参考 函数日志。

1934890530796658 2020-03-27 16:19:17 0 浏览量 回答数 0

回答

阿里云小程序Serverless提供以下三种功能: 数据存储 数据存储服务是基于MongoDB托管在云端的数据库,数据以JSON格式存储。数据库中的每条记录都是一个JSON格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表)。 文件存储 文件存储服务支持文本、图片和其他由用户生成的内容存储到云端。开发者可以在小程序端和控制台使用云存储功能。图片上传成功后,系统会自动生成一个资源链接。开发者可以在小程序中使用该图片地址。 云函数 云函数服务支持使用Node.js进行开发。作为开发者,您可以可将代码提交到云端运行,在客户端使用小程序提供的API进行调用。您还可以在云函数中直接通过API调用数据存储和文件存储的服务资源。

南霸天霸南北 2020-02-17 16:41:12 0 浏览量 回答数 0

问题

如何结合Jquery 的validate 和 ajax submit进行工作.

a123456678 2019-12-01 20:21:48 787 浏览量 回答数 1

问题

【javascript学习全家桶】934道javascript热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:22 6202 浏览量 回答数 1

问题

【精品问答】Node.js 性能平台

montos 2020-04-09 19:25:39 4 浏览量 回答数 1

回答

Guns基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + mybatis-plus + beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架。Guns v3.0新增rest api服务,提供对接服务端接口的支持,并利用jwt token鉴权机制给予客户端的访问权限,传输数据进行md5签名保证传输过程数据的安全性!项目特点1、基于SpringBoot,简化了大量项目配置和maven依赖,让您更专注于业务开发,独特的分包方式,代码多而不乱。2、完善的日志记录体系,可记录登录日志,业务操作日志(可记录操作前和操作后的数据),异常日志到数据库,通过@BussinessLog注解和LogObjectHolder.me().set()方法,业务操作日志可具体记录哪个用户,执行了哪些业务,修改了哪些数据,并且日志记录为异步执行,详情请见@BussinessLog注解和LogObjectHolder,LogManager,LogAop类。3、利用beetl模板引擎对前台页面进行封装和拆分,使臃肿的html代码变得简洁,更加易维护。4、对常用js插件进行二次封装,使js代码变得简洁,更加易维护,具体请见webapp/static/js/common文件夹内js代码。5、利用ehcache框架对经常调用的查询进行缓存,提升运行速度,具体请见ConstantFactory类中@Cacheable标记的方法。6、controller层采用map + warpper方式的返回结果,返回给前端更为灵活的数据,具体参见com.stylefeng.guns.modular.system.warpper包中具体类。7、防止XSS攻击,通过XssFilter类对所有的输入的非法字符串进行过滤以及替换。8、简单可用的代码生成体系,通过SimpleTemplateEngine可生成带有主页跳转和增删改查的通用控制器、html页面以及相关的js,还可以生成Service和Dao,并且这些生成项都为可选的,通过ContextConfig下的一些列xxxSwitch开关,可灵活控制生成模板代码,让您把时间放在真正的业务上。9、控制器层统一的异常拦截机制,利用@ControllerAdvice统一对异常拦截,具体见com.stylefeng.guns.core.aop.GlobalExceptionHandler类。10、页面统一的js key-value单例模式写法,每个页面生成一个唯一的全局变量,提高js的利用效率,并且有效防止多个人员开发引起的函数名/类名冲突,并且可以更好地去维护代码。11、可以查看博文:热门开源项目:Guns-后台管理系统-博客-云栖社区-阿里云 https://yq.aliyun.com/articles/224607?spm=5176.8091938.0.0.aLr7RG

zwt9000 2019-12-02 00:24:40 0 浏览量 回答数 0

问题

Knockout.js 体验之旅

小太阳1号 2019-12-01 21:11:47 2822 浏览量 回答数 1

回答

绑定域名先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 备注:登录后可在“开发者中心”查看对应的接口权限。 引入js文件在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js 请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系统中成功使用JSSDK 通过config接口注入权限验证信息所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。 wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名,见附录1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); appId:在微信公众号中查看信息 timestamp:时间戳,可以通过js获取 Date.parse(new Date())获取当前时间的毫秒值 nonceStr 通过uuid生成随机字符串(永远不会重复) signature 签名的获取: 1 通过 appId和appSecret 获取:access_token 发送请求 $.ajax({ type: "GET", async:false, url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET', success: function(data){ config=data; console.log(config); } }) 2 通过access_token获取signature 签名 签名算法 签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。 即signature=sha1(string1) demo: noncestr=Wm3WZYTPz0wzccnWjsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qgtimestamp=1414587457url=http://mp.weixin.qq.com?params=value步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1: jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value步骤2. 对string1进行sha1签名,得到signature: 0f9de62fce790f9a083d5c99e95740ceb90c27ed注意事项 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。签名用的url必须是调用JS接口页面的完整URL。出于安全考虑,开发者必须在服务器端实现签名的逻辑。配置信息获取完之后: 通过ready接口处理成功验证wx.ready(function(){ // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口, //则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 });通过error接口处理失败验证wx.error(function(res){ // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 }); //转发到朋友圈 wx.onMenuShareTimeline({ title: 'JSSDK朋友圈转发测试', link: link, imgUrl: imgUrl, success: function () { alert('转发成功!'); }, cancel: function () { alert('转发失败!'); } }); //转发给朋友 wx.onMenuShareAppMessage({ title: 'JSSDK朋友圈转发测试', desc: '转发给朋友', link: link, imgUrl: imgUrl, type: 'link', dataUrl: '', success: function () { alert('转发成功!'); }, cancel: function () { alert('转发失败!'); } }); ps:来源网络

元芳啊 2019-12-02 00:54:55 0 浏览量 回答数 0

回答

(1)对图片本身进行操作。尽量不要使用setImageBitmap、setImageResource、BitmapFactory.decodeResource来设置一张大图,因为这些方法在完成decode后, 最终都是通过java层的createBitmap来完成的,需要消耗更多内存. (2)图片进行缩放的比例,SDK中建议其值是2的指数值,值越大会导致图片不清晰。 (3)不用的图片记得调用图片的recycle()方法 25、HybridApp WebView和JS交互 Android与JS通过WebView互相调用方法,实际上是: Android去调用JS的代码 通过WebView的loadUrl(),使用该方法比较简洁,方便。但是效率比较低,获取返回值比较困难。 通过WebView的evaluateJavascript(),该方法效率高,但是4.4以上的版本才支持,4.4以下版本不支持。所以建议两者混合使用。 JS去调用Android的代码 通过WebView的addJavascriptInterface()进行对象映射 ,该方法使用简单,仅将Android对象和JS对象映射即可,但是存在比较大的漏洞。 漏洞产生原因是:当JS拿到Android这个对象后,就可以调用这个Android对象中所有的方法,包括系统类(java.lang.Runtime 类),从而进行任意代码执行。 解决方式: (1)Google 在Android 4.2 版本中规定对被调用的函数以 @JavascriptInterface进行注解从而避免漏洞攻击。 (2)在Android 4.2版本之前采用拦截prompt()进行漏洞修复。 通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url 。这种方式的优点:不存在方式1的漏洞;缺点:JS获取Android方法的返回值复杂。(ios主要用的是这个方式) (1)Android通过 WebViewClient 的回调方法shouldOverrideUrlLoading ()拦截 url (2)解析该 url 的协议 (3)如果检测到是预先约定好的协议,就调用相应方法 通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt() 消息 这种方式的优点:不存在方式1的漏洞;缺点:JS获取Android方法的返回值复杂。

剑曼红尘 2020-04-10 12:48:25 0 浏览量 回答数 0

问题

什么是函数计算事件处理函数

boxti 2019-12-01 21:48:44 866 浏览量 回答数 0

问题

Node.js 应该处于技术架构中的哪个位置?

李博 bluemind 2019-12-01 21:47:42 2961 浏览量 回答数 0

回答

###先上链接: 浏览器与Node的事件循环(Event Loop)有何区别? html#event-loops Node.js 事件循环,定时器和 process.nextTick() 第一个链接里面大佬讲的已经非常透彻了我来总结一下。 ###浏览器 关于微任务和宏任务在浏览器的执行顺序是这样的: 执行一只task(宏任务)执行完micro-task队列 (微任务) 如此循环往复下去 浏览器的task(宏任务)执行顺序在 html#event-loops 里面有讲就不翻译了 常见的 task(宏任务) 比如:setTimeout、setInterval、script(整体代码)、 I/O 操作、UI 渲染等。 常见的 micro-task 比如: new Promise().then(回调)、MutationObserver(html5新特性) 等。 Node Node的事件循环是libuv实现的 大体的task(宏任务)执行顺序是这样的: timers定时器:本阶段执行已经安排的 setTimeout() 和 setInterval() 的回调函数。pending callbacks待定回调:执行延迟到下一个循环迭代的 I/O 回调。 idle, prepare:仅系统内部使用。poll 轮询:检索新的 I/O 事件;执行与 I/O 相关的回调(几乎所有情况下,除了关闭的回调函数,它们由计时器和 setImmediate() 排定的之外),其余情况 node 将在此处阻塞。check 检测:setImmediate() 回调函数在这里执行。close callbacks 关闭的回调函数:一些准备关闭的回调函数,如:socket.on('close', ...)。 微任务和宏任务在Node的执行顺序 Node 10以前: 执行完一个阶段的所有任务执行完nextTick队列里面的内容然后执行完微任务队列的内容 Node 11以后: 和浏览器的行为统一了,都是每执行一个宏任务就执行完微任务队列。

九旬 2020-05-24 11:24:39 0 浏览量 回答数 0

回答

不要以为所有的post都是明码递交,你也看看递交按钮的代码啊,肯定有js混淆。 粗略看了一下页面源码,登录框是一个iframe(果然是古老的设计),嵌套的页面在这里呢: http://hdjw.hnu.cn/_data/index_login.aspx 打开chrome开发者工具,可以看到这个页面请求还有个md5.js,没细读,应该是用于混淆用户名和密码用。 大致看了一下页面源码,递交post函数在这里: else { document.getElementById('divLogNote').innerHTML='正在通过身份验证...请稍候!'; Ajax.doPost("index_login.aspx","Sel_Type="+document.all.Sel_Type.value+"&werereruuyyuxcxcx="+document.all.werereruuyyuxcxcx.value+"&efdfdfuuyyuuckjg="+document.all.efdfdfuuyyuuckjg.value+"&roleCHK="+roleCHK+"&typeName="+document.all.typeName.value,fillOptions,true); document.all.txt_dsdsdsdjkjkjc.value=''; document.all.txt_dsdfdfgfouyy.value=''; document.all.txt_ysdsdsdskgf.value=''; } } function fillOptions() { } 利用Ajax向http://hdjw.hnu.cn/_data/index_login.aspx发起post请求,请求的主体就是后面那几个字符串拼接的东西。So,去读源码吧,看看这几个函数的算法是什么,用python实现了这个几个函数的算法即可。Over ######回复 @BigGhost : 给个联系方式啊,我最近也在弄这个,我们的教务系统好像是一样的。。。######谢谢哈!思路敞开多了。

kun坤 2020-06-05 22:55:13 0 浏览量 回答数 0

问题

【分享】WeX5的正确打开方式(3)——绑定机制

小太阳1号 2019-12-01 21:23:54 5393 浏览量 回答数 3

回答

社团管理系统 简介:此应用是结合了基于云开发平台以及云函数、云数据库等产品开发的创新项目,使用React+Antd+阿里云 serveless OTS数据库相结合完成的一个适用于社团管理社团成员成员等信息,并可以通过可视化的面板分析社团内部的数据,画图使用了Echart,文章编辑器使用了marked.js,支持增删改查等一系类操作,有些功能还正在开发中,该项目具有可扩展性,后期可以在此项目上添加更多更丰富的功能 网址:http://serveless_group.ygjie.icu/

跌倒的小黄瓜 2020-08-19 18:15:33 0 浏览量 回答数 0

回答

//请写出输出内容 async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } async function async2() { console.log('async2'); } console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0) async1(); new Promise(function(resolve) { console.log('promise1'); resolve(); }).then(function() { console.log('promise2'); }); console.log('script end'); /* script start async1 start async2 promise1 script end async1 end promise2 setTimeout */ 这道题主要考察的是事件循环中函数执行顺序的问题,其中包括async ,await,setTimeout,Promise函数。下面来说一下本题中涉及到的知识点。 任务队列 首先我们需要明白以下几件事情: - JS分为同步任务和异步任务 - 同步任务都在主线程上执行,形成一个执行栈 - 主线程之外,事件触发线程管理着一个任务队列,只要异步任务有了运行结果,就在任务队列之中放置一个事件。 - 一旦执行栈中的所有同步任务执行完毕(此时JS引擎空闲),系统就会读取任务队列,将可运行的异步任务添加到可执行栈中,开始执行。 根据规范,事件循环是通过任务队列的机制来进行协调的。一个 Event Loop 中,可以有一个或者多个任务队列(task queue),一个任务队列便是一系列有序任务(task)的集合;每个任务都有一个任务源(task source),源自同一个任务源的 task 必须放到同一个任务队列,从不同源来的则被添加到不同队列。 setTimeout/Promise 等API便是任务源,而进入任务队列的是他们指定的具体执行任务。 宏任务 (macro)task(又称之为宏任务),可以理解是每次执行栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)。 浏览器为了能够使得JS内部(macro)task与DOM任务能够有序的执行,会在一个(macro)task执行结束后,在下一个(macro)task 执行开始前,对页面进行重新渲染,流程如下: (macro)task->渲染->(macro)task->... (macro)task主要包含:script(整体代码)、setTimeout、setInterval、I/O、UI交互事件、postMessage、MessageChannel、setImmediate(Node.js 环境) 微任务 microtask(又称为微任务),可以理解是在当前 task 执行结束后立即执行的任务。也就是说,在当前task任务后,下一个task之前,在渲染之前。 所以它的响应速度相比setTimeout(setTimeout是task)会更快,因为无需等渲染。也就是说,在某一个macrotask执行完后,就会将在它执行期间产生的所有microtask都执行完毕(在渲染前)。 microtask主要包含:Promise.then、MutaionObserver、process.nextTick(Node.js 环境) 运行机制 在事件循环中,每进行一次循环操作称为 tick,每一次 tick 的任务处理模型是比较复杂的,但关键步骤如下: 执行一个宏任务(栈中没有就从事件队列中获取)执行过程中如果遇到微任务,就将它添加到微任务的任务队列中宏任务执行完毕后,立即执行当前微任务队列中的所有微任务(依次执行)当前宏任务执行完毕,开始检查渲染,然后GUI线程接管渲染- 渲染完毕后,JS线程继续接管,开始下一个宏任务(从事件队列中获取) 回到本题 首先,事件循环从宏任务(macrotask)队列开始,这个时候,宏任务队列中,只有一个script(整体代码)任务;当遇到任务源(task source)时,则会先分发任务到对应的任务队列中去。然后我们看到首先定义了两个async函数,接着往下看,然后遇到了 console 语句,直接输出 script start。输出之后,script 任务继续往下执行,遇到 setTimeout,其作为一个宏任务源,则会先将其任务分发到对应的队列中script 任务继续往下执行,执行了async1()函数,前面讲过async函数中在await之前的代码是立即执行的,所以会立即输出async1 start。遇到了await时,会将await后面的表达式执行一遍,所以就紧接着输出async2,然后将await后面的代码也就是console.log('async1 end')加入到microtask中的Promise队列中,接着跳出async1函数来执行后面的代码。script任务继续往下执行,遇到Promise实例。由于Promise中的函数是立即执行的,而后续的 .then 则会被分发到 microtask 的 Promise 队列中去。所以会先输出 promise1,然后执行 resolve,将 promise2 分配到对应队列。 script任务继续往下执行,最后只有一句输出了 script end,至此,全局任务就执行完毕了。 根据上述,每次执行完一个宏任务之后,会去检查是否存在 Microtasks;如果有,则执行 Microtasks 直至清空 Microtask Queue。 因而在script任务执行完毕之后,开始查找清空微任务队列。此时,微任务中, Promise 队列有的两个任务async1 end和promise2,因此按先后顺序输出 async1 end,promise2。当所有的 Microtasks 执行完毕之后,表示第一轮的循环就结束了。 第二轮循环依旧从宏任务队列开始。此时宏任务中只有一个 setTimeout,取出直接输出即可,至此整个流程结束。

九旬 2020-05-24 22:19:57 0 浏览量 回答数 0

回答

" 不要以为所有的post都是明码递交,你也看看递交按钮的代码啊,肯定有js混淆。 粗略看了一下页面源码,登录框是一个iframe(果然是古老的设计),嵌套的页面在这里呢: http://hdjw.hnu.cn/_data/index_login.aspx 打开chrome开发者工具,可以看到这个页面请求还有个md5.js,没细读,应该是用于混淆用户名和密码用。 大致看了一下页面源码,递交post函数在这里: else { document.getElementById('divLogNote').innerHTML='正在通过身份验证...请稍候!'; Ajax.doPost("index_login.aspx","Sel_Type="+document.all.Sel_Type.value+"&werereruuyyuxcxcx="+document.all.werereruuyyuxcxcx.value+"&efdfdfuuyyuuckjg="+document.all.efdfdfuuyyuuckjg.value+"&roleCHK="+roleCHK+"&typeName="+document.all.typeName.value,fillOptions,true); document.all.txt_dsdsdsdjkjkjc.value=''; document.all.txt_dsdfdfgfouyy.value=''; document.all.txt_ysdsdsdskgf.value=''; } } function fillOptions() { } 利用Ajax向http://hdjw.hnu.cn/_data/index_login.aspx发起post请求,请求的主体就是后面那几个字符串拼接的东西。So,去读源码吧,看看这几个函数的算法是什么,用python实现了这个几个函数的算法即可。Over ######回复 @BigGhost : 给个联系方式啊,我最近也在弄这个,我们的教务系统好像是一样的。。。######谢谢哈!思路敞开多了。" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/b0bb6c52ff1849f08925d0cb2c7d57f6.png)

python小菜菜 2020-05-27 16:25:58 0 浏览量 回答数 0

回答

检查下编码,chrome调试查看下返回数据等回复 @吃兔纸不吐毛:alert有值格式或编码不一定对,你可以把获取的数据贴出来大家看看你好,就是success回调函数里面那个data,alert()出来都是有值的,但是就是进不去循环。 1.建议直接在地址栏敲地址以get方式发送Http请求,查看是否有响应数据,以及响应数据的格式; 2.同事注意你页面中引用的第三方js是否有因网络隔离问题造成不能访问,通过浏览器的F12开发人员工具看是否有404现象; 3.注意你服务器上启动tomcat的系统用户是否有权限读取你页面中引用的js文件; 解决了,很尴尬,不是前端的问题,是后台的问题,部署上线后,后台总是出不来数据,用SecureCRT打印日志的时候发现都是null,但是本地就可以。每行部署alert的代码上服务器,能出数据的原因可能是浏览器缓存,现在的解决方案就是不解决,直接前端注释了,反正老板也不管。

爱吃鱼的程序员 2020-06-08 11:13:16 0 浏览量 回答数 0

回答

函数计算目前原生支持的开发语言有 nodejs, python, java, php 和 c#, 在实现这些开发语言 runtime 的时候, 函数计算开发团队花了很大的精力去让各自语言的传统应用能够简单快速迁移到函数计算平台: nodejs 开发函数计算的正确姿势——移植 Express python , 支持 WSGI 协议的框架可以一键迁移到函数计算 部署基于 python wsgi web 框架的工程到函数计算 十分钟上线-在函数计算上部署基于django开发的个人博客系统 java Java Http 触发器极速迁移传统 Spring 应用 php 一元建站-基于函数计算 + wordpress 构建 serverless 网站 C# 十分钟上线-基于函数计算开发 Restful web api & asp.net core web app 如上述所列的各自语言的传统应用迁移到函数计算的迁移方案, 虽然已经足够简单, 但是还是需要去理解一下函数计算的接口以及各自语言在函数计算环境中运行起来的原理, 比如 python, 用户需要理解 WSGI 协议, 然后才编写一个符合要求的入口函数。 为了彻底解放生产力, Custom Runtime 应运而生, Custom Runitme 可以解决以下两个重要需求: 可以随心所欲持定制个性化语言执行环境(例如 golang、lua、ruby)以及各种语言的小版本(例如python3.7、Nodejs12)等,打造属于自己的自定义runtime 现有的 web 应用或基于传统开发 web 项目基本不用做任何改造,即可将项目一键迁移到函数计算平台 用户要实现一个最简单的 Custom runtime,只要符合以下两条: 创建一个http server,监听在固定端口(端口可以读取环境变量 FC_SERVER_PORT,默认为 9000) http server 需要在 15s 内完成启动 接下来, 我们梳理一下基于 Custom Runtime 一键迁移案例。 custom 实现注意细节: Custom Runtime 启动的服务一定监听 0.0.0.0:9000 或者 *:9000 端口,不用使用127.0.0.1:9000, 会导致请求超时。{“ErrorCode”:”FunctionNotStarted”,”ErrorMessage”:”The CA’s http server cannot be started:ContainerStartDuration:25000000000. Ping CA failed due to: dial tcp 21.0.5.7:9000: getsockopt: connection refused Logs : 2019-11-29T09:53:30.859837462Z Listening on port 9000\r\n”} Custom Runtime 的 bootstrap 一定需要添加 #!/bin/bash,不然会遇见如下错误{“ErrorCode”:”CAExited”,”ErrorMessage”:”The CA process either cannot be started or exited:ContainerStartDuration:25037266905. CA process cannot be started or exited already: rpc error: code = 106 desc = ContainerStartDuration:25000000000. Ping CA failed due to: dial tcp 21.0.7.2:9000: i/o timeout Logs : 2019-11-29T07:27:50.759658265Z panic: standard_init_linux.go:178: exec user process caused \”exec format error\” bootstrap 一定需要可执行权限 bootstrap 代码一定要执行到 http server 启动成功的逻辑, 不能被前面的逻辑阻塞, 比如启动server之前, 尝试连接一个不可达的数据库,造成启动时间 timeout http server 的实现 connection keep alive, request timeout 至少10分钟以上 案例 java Serverless 实战 —— 快速搭建 SpringBoot 应用 Serverless 实战 —— 移植 spring-petclinic 到函数计算 python import tornado.ioloop import tornado.web import os class MainHandler(tornado.web.RequestHandler): def get(self): rid = self.request.headers.get('x-fc-request-id',None) print("FC Invoke Start RequestId: " + str(rid)); # your logic self.write("GET: Hello world") print("FC Invoke End RequestId: " + str(rid)); def post(self): rid = self.request.headers.get('x-fc-request-id',None) print("FC Invoke Start RequestId: " + str(rid)); # your logic self.write("GET: Hello world") print("FC Invoke End RequestId: " + str(rid)); def make_app(): return tornado.web.Application([ (r"/.*", MainHandler), ]) if name == "main": app = make_app() port = os.environ.get("FC_SERVER_PORT", "9000") app.listen(int(port)) tornado.ioloop.IOLoop.current().start() 本地安装第三方包 tornado 然后编写一个具有可执行权限的名字为bootstrap (注:#!/bin/bash注释是必需的)文件启动上面代码的 http server: #!/bin/bash python server.py go 基于custom runtime 打造 golang runtime nodejs 'use strict'; var express = require('express'); var app = express(); var crypto = require('crypto'); app.post(/.*/, function (req, res) { var rid = req.headers["x-fc-request-id"]; console.log(FC Invoke Start RequestId: ${rid}); // your logic, for example, get hash var secret = 'abcdefg'; var hash = crypto.createHmac('sha256', secret) .update('I love cupcakes') .digest('hex'); // c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e console.log(hash); res.send(hash); console.log(FC Invoke End RequestId: ${rid}); }); var port = process.env.FC_SERVER_PORT || 9000 app.listen(port, function () { console.log("FunctionCompute custom-nodejs runtime inited."); }); app.timeout = 0; // never timeout app.keepAliveTimeout = 0; // keepalive, never timeout 本地安装第三方包 express 然后编写一个具有可执行权限的名字为bootstrap (注:#!/bin/bash注释是必需的)文件启动上面代码的 http server: #!/bin/bash node server.js php 基于custom runtime + nginx + php-fpm 运行 wordpress:customruntime-php .NETCORE CSharp .Net Core 2.1 MVC Web应用迁移到函数计算 custom runtime 教程同样适用于 .netcore 3.0

1934890530796658 2020-03-27 16:29:17 0 浏览量 回答数 0

回答

对于页面加载时间的测试,简单的需求(仅仅是看看请求时间消耗分布)可以通过开发者工具或者Http Watch了解,但如果是想对页面加载进行优化,进行深入了解的(例如:渲染过程中的CPU开销、网络传输时间与客户端渲染时间的分别耗时、世界同类型站点响应排名),那么可以使用dynaTrace AJAX Edition使用并不复杂,启动浏览器,访问一遍希望了解的页面,针对每一个页面,dynaTrace AJAX Edition都会提供如下信息:1)Summary可以选择和各类型的站点进行性能排名PK,例如alexa排名前1000、500、100的站点、新闻站点、购物网站,了解我们站点在这类型网站中的各项性能指标排名,例如默认的和最佳范例比较,可以看到,综合排名来说,案例业务系统算是A级,超越了96%,缓存等级、网络等级、javascript等级都处于A级,服务响应等级处于B级,顺便说下,排名数据是可以在线更新的。也还可以看到各种加载时间指标的排名情况、服务端时间与客户端时间消耗的排名情况、网络消耗时间排名,以及前面所说指标的等级信息:也还可以看到各种加载时间指标的排名情况、服务端时间与客户端时间消耗的排名情况、网络消耗时间排名,以及前面所说指标的等级信息:2)caching可以看到浏览器缓存利用情况,下面的例子里面等级只能算E,并提示102个静态请求其中97个影响了等级排名列表里面可以看到,所有资源都没有使用expires标记这里也需要注意,post类型的请求,浏览器一般不启用本地缓存,对于静态内容,web服务器默认情况下不会开启expires标记的支持3)network从这里可以看到一些有助于减少网络资源开销的信息,例如4XX、5XX的资源请求又例如图片资源过大、css文件和js文件过大过多的问题,如下图在建议进行图片、css、js文件合并,并估算合并后能够因此带来多少的响应性能提升:又例如图片资源过大、css文件和js文件过大过多的问题,如下图在建议进行图片、css、js文件合并,并估算合并后能够因此带来多少的响应性能提升:4)server-side:列出了所有资源的总响应时间、其中服务器部分的时间,并显示了这些资源的体积,超过200ms的用了红色底色标注5)timeline:  时间轴,按照时间轴显示会话过去页面的每个时间点对应的事件,包括CPU占用(可惜不显示指标值)、javascript时间、类型的呈现、网络上的时间消耗、客户端事件信息。例如下面的监控信息里面可以看到,网络的时间消耗主要是HTML资源,如果需要对细节部分浏览的话,用左键可以划出一个放大的区间,把时间线定位到相应的红色部分,就显示了那个时间点网络资源出现消耗的原因,是两个gif例如下面的监控信息里面可以看到,网络的时间消耗主要是HTML资源,如果需要对细节部分浏览的话,用左键可以划出一个放大的区间,把时间线定位到相应的红色部分,就显示了那个时间点网络资源出现消耗的原因,是两个gif同理,对于javascript,占较长时间的部分是浅黄色表示的“load”,双击时间块可以查看其时间消耗详情以及具体的函数代码:同理,对于javascript,占较长时间的部分是浅黄色表示的“load”,双击时间块可以查看其时间消耗详情以及具体的函数代码:对于rendering,看其中的这一段,双击它:对于rendering,看其中的这一段,双击它:可以看到渲染事件的发生情况,了解css表达式带来的性能问题是否严重可以看到渲染事件的发生情况,了解css表达式带来的性能问题是否严重 可以看到渲染事件的发生情况,了解css表达式带来的性能问题是否严重 可以看到渲染事件的发生情况,了解css表达式带来的性能问题是否严重6)KPI's选项卡:各项指标消耗统计  first impression 视觉上的响应时间 , onload 加载消耗的时间 , total load time 完成加载的时间  requests 请求数,XHR XMLHTTPRequest数

小旋风柴进 2019-12-02 02:25:27 0 浏览量 回答数 0

问题

nodejs异步IO的实现? 400 报错

爱吃鱼的程序员 2020-05-29 20:16:19 0 浏览量 回答数 1

问题

Web设计与开发终极资源大全(上)报错 

kun坤 2020-06-08 19:29:45 1 浏览量 回答数 1

回答

云端接入域名和端口号是什么? 域名:js ${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com 。 其中,${YourProductKey}请替换为您的产品ProductKey;${YourRegionId}请参见地域和可用区,替换为您在物联网平台创建产品时选择的地域代码。 端口: 1883。 使用MQTT协议连接,不同的设备可以使用相同的clientID连接服务器吗? clientID需为全局唯一。如果不同的设备使用相同的clientID同时连接物联网平台,那么先连接的那个设备会被强制断开。 如何开启域名直连? MQTT连接有两种方式。 认证后再连接:首先使用HTTPS连接到```js js iot-auth.cn-shanghai.aliyuncs.com:443 获取认证cert后,再使用MQTT连接到 ```js js/public.iot-as-mqtt.cn-shanghai.aliyuncs.com/1883。 认证连接必须使用TLS加密进行认证。 域名直连:连接域名:js ${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883 。 域名直连减少了HTTPS获取证书cert的过程。 资源受限的设备推荐使用域名直连。一些特殊增值服务,例如设备级别的引流,则推荐先HTTPS发送授权后再连接MQTT。在make.setting中设置js FEATURE_MQTT_DIRECT=y , 然后执行js make reconfig 即 可设置为先认证后再MQTT连接。 MQTT协议版本是多少? 在MQTT connect packet中设置MQTT的版本。目前SDK(V2.02)使用MQTT 3.1.1 。 可以修改SDK代码中js src\mqtt\mqtt_client.h IOTX_MC_MQTT_VERSION 的 值,来修改支持的版本。3:3.1版;4:3.1.1版。 MQTT进行设备认证时,server返回“400”错误 认证返回400错误,表示鉴权认证失败。请检查设备证书信息ProductKey、DeviceName和DeviceSecret是否正确。 C语言SDK中MQTT是否支持iOS接入? C语言SDK可以移植到任何能够支持C语言的系统上。如果是iOS系统建议寻找开源的Object-C实现。 目前mqtt-example设备上线后会立刻下线,请问如何修改mqtt-example让设备一直处于上线状态? mqtt-example程序发送一次消息后会自动退出,可以尝试以下任意一种方式实现长期在线。 执行mqtt-example时,使用命令行js ./mqtt-example loop , 设备会保持长期在线。修改demo代码。example 的代码在最后会调用IOT_MQTT_Destroy,设备最后会变成离线状态,所以可以修改代码,去掉IOT_MQTT_Unregister 和IOT_MQTT_Destroy。 while(1) { IOT_MQTT_Yield(pclient, 200); HAL_SleepMs(100); } 心跳的时间间隔如何设置? 在IOT_MQTT_Construct里面可以设置keepalive_interval_ms的取值。物联网平台使用这个值来作为心跳间隔时间。keepalive_interval_ms的取值范围是60000~300000。 设备端的重连机制是什么? 设备端会在keepalive_interval_ms时间间隔发送ping request,然后等待ping response。 如果设备端在keepalive_interval_ms时间内无法收到ping response,或是在进行send以及recv时发生错误,平台就认为此时网络断开,而需要进行重连。 重连机制是平台内部触发,无需使用者接入。重连时,会重新进行认证。如果认证成功就会开始再次进行MQTT connect。重连会一直持续直到再次连接成功。 云端如何侦测到设备离线? 云端会根据MQTT CONNECT packet里面keepalive的设置,等待ping request。如果在指定时间内没有收到ping request,则认为设备离线。 云端可以接受的最大时延是5秒。 设备端SDK是否支持MQTT和CCP协议的断线重连? 支持。测试场景描述:开发板通过WiFi连接上路由器后,把网线拔掉,MQTT和CCP协议都会自动尝试和server重新建立连接。尝试时间间隔是1s、2s、4s、8s、…,最大间隔时间默认是60s,也就是说断网后超过60s时间仍未连接成功,之后会每隔60s尝试和server重连。您可以设置最大间隔时间。 发布(Publish QoS1)数据时,偶尔会出现MQTT_PUSH_TO_LIST_ERROR(-42),如何解决? 需要等待ACK的packet都会存放起来,等待ACK。存放量有上限,当需要等待的packet太多到达上限时,就会触发js MQTT_PUSH_TO_LIST_ERROR(-42) error 。 出现错误可能是因为当前网络状态不好,或者是发送的频率过高。如果排除上述两个问题,当前的发送的频率是预期的,那么可以适当的调整IOTX_MC_REPUB_NUM_MAX、 IOTX_MC_SUB_REQUEST_NUM_MAX和IOTX_MC_SUB_NUM_MAX的大小。 如果业务允许,也可以把publish的QoS调整成0。 IOT_MQTT_Yield的作用是什么? IOT_MQTT_Yield的作用是尝试接收数据。因此在需要接收数据时,例如subscribe 和 unsubscribe之后,publish QoS1 消息之后,或是希望收到publish 数据时,都需要主动调用该函数。 IOT_MQTT_Yield参数timeout的意义是什么? IOT_MQTT_Yield会尝试接收数据,直到timeout时间到后才会退出。 IOT_MQTT_Yield与HAL_SleepMs的区别 IOT_MQTT_Yield与HAL_SleepMs都是阻塞一段时间,但是IOT_MQTT_Yield实质是去读取数据,而HAL_SleepMs则是系统什么也不做,等待timeout。 如何循环接收消息? 需要循环调用IOT_MQTT_Yield ,函数内自动维持心跳和接收数据。 订阅了多个Topic,调用一次IOT_MQTT_Yield,能接收到多个Topic的消息吗? 首先需要确定Topic的权限,是不是同时满足发布和订阅。如果是,调用一次IOT_MQTT_Yield,可以接收到多个packet。 MQTT连接方式,只能通过不停地调用IOT_MQTT_Yield来轮询获取数据吗? 如果使用的TCPIP协议栈,可以实现TCP主动通知上层有数据到达,可以改动实现事件触发的方式来触发IOT_MQTT_Yield。但是改动比较大,所以还请自行评估是否需要修改。 修改流程是: 调整utils_net.c里面socket的API,变成可以由TCP数据到达时回调的API。 当TCP主动通知上层有数据到达时,通知到MQTT服务器。让MQTT服务器内部执行IOT_MQTT_Yield,这样就可以不需要外部调用IOT_MQTT_Yield来读取数据。 如果TCP无法做到主动上报数据,但OS支持多线程,也可以在MQTT-example里面再起一个thread,在这个thread里面以下代码用于接收数据。收到数据时,触发主线程进行数据处理,而主线程大部分时间可以用于处理其他逻辑。 while(1) { IOT_MQTT_Yiled(pclient, 200); HAL_SleepMs(200); } 如果使用的系统也不支持多线程,就只能把IOT_MQTT_Yield的timeout时间间隔减小,然后提高调用的频率,在每次调用的时间间隔内执行其他操作,从而做到尽量减少对其他操作的阻塞。 是否支持QoS 2? 不支持。 什么情况下会发生订阅超时(subscribe timeout)? 在2倍request_timeout_ms时间内,系统未接收到SUBACK packet时,会触发订阅超时,并通过event_handle函数发送超时通知。 请在subscribe之后,立刻执行IOT_MQTT_Yield尝试读取SUBACK,请勿使用HAL_SleepMs。 subcribe时,返回IOTX_MQTT_EVENT_SUBCRIBE_NACK 请检查Topic的操作权限是否为订阅。 如果发布报错“no authorization”,请确认是否为发布权限。 MQTT 发布的消息体大小限制 MQTT的协议包受限于IOT_MQTT_Construct里参数的write_buf和read_buf的大小。 MQTT协议包大小不能超过256 KB。超过大小限制的消息会被丢弃。 MQTT协议pub消息payload格式是怎么样的? 物联网平台没有制定pub消息payload的具体字段有那些。您根据应用场景制定自己的协议,然后以JSON格式放到pub消息载体里面传给服务端。 ota_mqtt升级的时候报错“mqtt read buffer is too short” MQTT设置的buffer过小,即mqtt_param的pread_buf和pwrite_buf申请过小造成的。可以根据实际需要修改OTA_MQTT_MSGLEN的大小。 是否可以使用MQTT直连的方式进行OTA升级? OTA升级时,必须使用HTTPS进行固件下载。MQTT只接收版本更新指令,与MQTT的连接方式无关。阿里云不支持HTTP下载固件,因此如果设备没有SSL通信的能力,则不能使用OTA服务。 打开MQTT over TLS,运行时提示MQTT创建失败,返回错误码0x2700 如果关闭MQTT over TLS则可以成功地订阅和发布信息;打开MQTT over TLS时,建连失败。首先确认mbedtls是否做了修改,这是用于传输层和应用层之间加密的功能,不能随意更改。mbedtls没有修改,则考虑系统时间是否正确,系统时间不对也会导致证书校验失败。 进行mqtt连接的时候,是否需要root.crt证书验证? 若使用TLS进行MQTT接入,需要下载根证书。 若使用物联网平台提供的demo进行开发,无需再下载根证书,demo中已自带证书。 物联网平台支持哪些QoS Level? 在MQTT协议和CCP协议下,阿里云物联网平台支持的QoS Level都包括0和1。

剑曼红尘 2020-03-05 12:51:20 0 浏览量 回答数 0

回答

环境变量简单来说就是给系统和应用程序设置一些参数,具体一个环境变量包括 名称参数值这样当系统启动一个应用程序的时候,这些参数就默认设置好了,在linux下你可以通过,修改/etc/profile、~/.profile等文件来设置系统全局的环境变量,如: # other settings # ... export my_var 'hello world!'; 然后就可以通过下面代码段,在你的程序运行期间获得这个值 #include <stdlib.h> #include <stdio.h> int main() { const char * my_var = getenv("my_var"); printf("my_var = %s\n", my_var); return 0; } 当然你说的nodejs程序中可以这样获取环境变量: console.log(process.env) 会输出类似这样: { PATH: '/usr/local/bin:/usr/bin', JAVAHOME: '/usr/lib/Java', ... } 执行子进程的时候,也可以指定子进程自己的环境变量,如: var exec = require('child_process').exec; var child = exec('cat *.js', { PATH: '/usr/bin', MY_VAR: 'hello world!' }, function (error, stdout, stderr) { console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); } }); 通过child_process.exec函数的第二个参数,传递一个Object去覆盖默认的环境变量 这是我的一些认识和见解,希望对你有帮助,具体更深的我也讲不来,呵呵!

a123456678 2019-12-02 02:57:38 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站