综合技术
直播中

张依然

7年用户 314经验值
私信 关注
[经验]

HTTP客户端例子分享!

     通过本节的学习,您将了解到如何使用JavaScript代码来实现HTTP的客户端例子。JSDuino开发板上拥有3种可以上网的硬件模块:以太网,WIFI和GPRS。http模块提供了一个叫use函数可以选择使用哪种硬件作为http的底层通讯,例如:http.use("wifi"),这里我们指定wifi作为http的底层通信,默认http使用以太网。       http的通信会使用到非常大的内存空间。JSDuino提供了一种JS模块方便用户申请缓存空间,例如://获取buffer缓存模块var buf = require("buffer");//申请1000个字节的缓存var data = buf.alloc(1000);其实Javascript语言在语法上是原生支持Buffer这样的变量类型的,但是为什么这里还是要自己实现一套buffer这样的js模块呢。原因是因为单片机内存资源非常有限,js原生支持的buffer在使用过程中会引导用户不断的申请内存空间,导致资源会被很快的消耗完。虽然JS引擎自带了内存回收机制来保证内存不会产生垃圾资源,但是频繁的启动内存回收会导致系统运行效率低下,甚至某些时刻因为内存不足导致部分代码无法正常工作。这里可以简单的向大家介绍一下什么是内存垃圾以及内存回收是如何工作的。首先我们看一个例子:var data = buf.alloc(1000);data = 1;上面的代码首先分配了一个1000字节的缓存,并赋值给data。但是当运行到第二行的时候,这个data变量却变成了一个整型数字1。这个时候,我们可以认为单片机的内存里面有1000个字节变成了垃圾内存,因为我们再也无法访问到这个缓存占用的内存空间了。那么内存垃圾是如何被回收呢?这里启动回收的触发条件是当内存空间不足的时候,无法再继续分配内存空间时,JS引擎则开始清理内存里面的垃圾,并释放空间。
http模块封装了如下几个API可供使用:use(name)http选择底层通信类型参数描述name字符串型,只识别eth、wifi、gprs这三个字符串,分别代表以太网、WIFI和GPRS通信。如果不使用这个函数,http默认使用以太网。
post(url, port, send_data, recv_data)Post方式发送请求参数描述url字符串类型,请求的目标链接地址port整型类型,请求的目标端口send_databuffer类型,发送请求时附带的数据recv_databuffer类型,获取的返回数据
get(url, port, recv_data)Get方式发送请求参数描述url字符串类型,请求的目标链接地址port整型类型,请求的目标端口databuffer类型,获取的返回数据
[JavaScript] 纯文本查看 复制代码
//获取http模块var http = require("http");//获取按键模块var key = require("key");//获取buffer缓存模块var buf = require("buffer");//申请1000个字节的缓存var data = buf.alloc(1000);//按键回调函数function key_cb(name){print(name);if(name == "key0") //按下key0,连接到server(可以下载tcpip调试助手){//http的get协议获取数据,这里可以根据情况更改url地址和端口print(http.get("http://192.168.0.103/index.html", 8080, data));//打印获取到的数据内容print(data.toString());}}//注册按键回调函数key.on(key_cb);function loop(){while(true){}}loop();
实验结果按下key0发送get请求,服务器返回index.html文件内容。
Javascript  WIFI客户端代码[AppleScript] 纯文本查看 复制代码
//获取http模块var http = require("http"); //获取按键模块var key = require("key");//获取buffer缓存模块var buf = require("buffer");//获取wifi模块var wifi = require("wifi");//申请1000个字节的缓存var data = buf.alloc(1000);//wifi连接到无线路由器,参数为ssid、密码print(wifi.init("TP-LINK_B957FD", "87654321"));//http模块使用wifi通信http.use("wifi");//按键回调函数function key_cb(name){        print(name);        if(name == "key0") //按下key0,连接到server(可以下载tcpip调试助手)        {                //http的get协议获取数据,这里可以根据情况更改url地址和端口                print(http.get("http://www.sohu.com/index.html", 80, data));                //打印获取到的数据内容                print(data.toString());        }        }//注册按键回调函数key.on(key_cb);function loop(){        while(true){        }}//无限循环loop();
实验结果程序开始运行时,首先连接wifi到路由器,并且打印连接是否成功的返回值。当返回值为true时表示连接成功,然后按下key0发送get请求,服务器返回index.html文件内容。

回帖(4)

晏玉屏

2019-10-11 08:54:43
谢谢分享
举报

陈敏

2019-10-11 09:13:40
感谢分享
举报

蒋荣艳

2019-10-11 09:23:35
您好,请问支持es6吗?
举报

徐敏

2019-10-11 09:32:23
不是支持js所有的语法标准
举报

更多回帖

发帖
×
20
完善资料,
赚取积分