Network

http request

Persim 提供了创建基于 http/https 协议的网络API。使用 httphttps 的方法一致,只是请求时候的 url 参数改为对应的 httphttpsurl 即可。

引入方式:

var http = require('http');
var rq = http.request(
    ...
)

或者直接使用

var rq = pm.request(
    ...
)

参数说明

参数 类型 必填 说明
url String 开发者服务器接口地址(可以是 http 或者 https)
data String,Object 请求的参数
header Object 设置请求的 header
method String 默认为 GET,有效值 GET,POST
success Function 收到开发者服务成功返回的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

success返回参数说明

参数 类型 说明
data Buffer 开发者服务器返回的数据
statusCode Number 开发者服务器返回的 HTTP 状态码
header Object 开发者服务器返回的 HTTP Response Header

示例代码

/*
本示例提供了一键获取http数据,并将获取到的数据打印出来 的示例代码。

注: 首先需要使用WiFi联网操作,然后绑定一个 button ,回调函数为 "onbtn"。
本示例可以结合WiFi一键联网示例,一键WiFi联网后获取http数据。
*/

var page = {
    /* 此方法在第一次显示窗体前发生 */
    onLoad: function (event) {
    },
    /* 此方法展示窗体前发生 */
    onShow: function (event) {
    },
    /* 此方法展示窗体后发生 */
    onResume: function (event) {
    },
    /* 此方法关闭窗体前发生 */
    onExit: function (event) {
    },
    onbtn: function (event) {
        // 当点击时,开始向远端服务器发送数据请求,并等待回应
        var rq = pm.request({
            //url: 'https://www.rt-thread.org/download/rt-thread.txt',  //url为https时
            url: 'http://www.rt-thread.com/service/rt-thread.txt',

            header: { "Content-Type": "application/json", },  //请求头类型
            success: function (res) {
                console.log('request success');
                console.log(res.data.toString()); //data为Buffer类型,打印时需要转成string类型
                console.log(res.statusCode);
            },
            complete: function () {
                console.log('request complete')
            },
            fail: function () {
                console.log('request failed')
            }
        })
    },
};
Page(page);
page = 0;

Net

提供了创建基于流的 TCP 服务器和客户端的异步网络 API。

引入方式:

var net = require('net');

net.server

  • net.createServer(options, connectionListener)

    创建一个新的 TCP 服务器,每当有新的 client 连接后,将触发 'connection' 事件。

    参数 类型 必填 说明
    options Object 连接设定选项
    connectionListener Function 事件 Connection 的 Listener

    其中 options 含有以下参数:

    参数 类型 必填 说明
    allowHalfOpen Bool 是否允许半打开,默认false
    readable Bool 是否可读,默认true
    writeable Bool 是否可写,默认true
  • server.listen(port, host, backlog, listenListener)

    启动一个TCP服务监听

    参数 类型 必填 说明
    port Number 客户端连接的 port
    host String 客户端连接的 host,默认'localhost'
    backlog Number 最大连接数,默认511
    listenListener Function 事件 listening 的 Listener
  • server.listen(options,listenListener)

    启动一个 TCP 服务监听

    参数 类型 必填 说明
    options Object 客户端连接选项
    listenListener Function 事件 listening 的 Listener

    其中options含有以下参数:

    参数 类型 必填 说明
    port Number 客户端连接的port
    host String 客户端连接的host,默认'localhost'
    backlog Number 最大连接数,默认:由固件配置,最大TCP Socket数 -3
  • server.close(closeListener)

    停止接收新的客户端,当已连接的客户端都关闭后,将触发 'close' 事件。

    参数 类型 必填 说明
    closeListener Function 事件 close 的 Listener

net.socket

  • net.socket(option)

    根据选项,创建一个 socket。

    参数 类型 必填 说明
    options Object 创建选项

    其中options含有以下参数:

    参数 类型 必填 说明
    allowHalfOpen Bool 是否允许半打开,默认false
    readable Bool 是否可读,默认 true
    writeable Bool 是否可写,默认 true
  • net.connect(options,connectListener)/net.createConnections(options,connectListener)

    创建一个新的 net.Socket 并自动根据 options 执行 socket.connect() 进行连接。成功后,connectListener 则会成为事件 connect 的 listener。

    当 socket 连接成功后,每当收到数据,将触发 data 事件。

    当 socket 收到 FIN package 后,将触发 end 事件。

    参数 类型 必填 说明
    options Object 连接选项
    connectListener Function 事件 connect 的 Listener

    其中options含有以下参数:

    参数 类型 必填 说明
    port Number 指定连接的 port
    host String 指定连接的 host,默认 'localhost'
    family Number IP 栈的版本,默认为 6,即 IPV6
  • net.connection(port,host,connectListener)/net.createConnection(port,host,connectListener)

    创建一个新的 net.Socket,并根据指定 port 和 host 执行 socket.connect() 进行连接。成功后,connectListener 则会成为事件 connect 的 listener。

    当 socket 连接成功后,每当收到数据,将触发 data 事件。

    参数 类型 必填 说明
    port Number 指定连接的 port
    host String 指定连接的 host,默认 'localhost'
    connectListener Function 事件 connect 的 Listener
  • socket.connect(options,connectListener)

    根据 options 执行 socket.connect() 进行连接。成功后,connectListener 则会成为事件 connect 的 listener。

    当 socket 连接成功后,每当收到数据,将触发 data 事件。

    参数 类型 必填 说明
    options Object 连接选项
    connectListener Function 事件 connect 的 Listener

    其中 options 含有以下参数:

    参数 类型 必填 说明
    port Number 指定连接的 port
    host String 指定连接的 host,默认 'localhost'
    family Number IP 栈的版本,默认为 6,即 IPV6
  • socket.connect(port, host, connectListener)

    根据指定 port 和 host 执行 socket.connect() 进行连接。成功后,connectListener 则会成为事件 connect 的 listener。

    当 socket 连接成功后,每当收到数据,将触发 data 事件。

    参数 类型 必填 说明
    port Number 指定连接的 port
    host String 指定连接的 host,默认 'localhost'
    connectListener Function 事件 connect 的 Listener
  • socket.write(data, callback)

    发送数据 data,发送完毕后执行 callback

    参数 类型 必填 说明
    data Buffer,String 需要发送的数据
    callback Function 发送完毕后,执行的回调函数
  • socket.destroy()

    确保在该 socket 上不再有 I/O 活动后,销毁 socket

  • socket.end(data,callback)

    发送数据 data 后,执行 callback。最后执行 socket.destory() 销毁 socket。

    参数 类型 必填 说明
    data Buffer,String 需要发送的数据
    callback Function 销毁 socket 后,执行的回调函数
  • socket.pause()

    停止读取数据。

  • socket.resume()

    执行socket.pause() 后,恢复读取数据。

  • socket.setTimeout(timeout, callback)

    当 socket 在指定时间内不活动,即没有读写操作,将触发 timeout 事件。

    参数 类型 必填 说明
    timeout Number 指定 Timeout 的大小,单位:毫秒
    callback Function 事件 timeout 的 Listener
  • socket.localAddress

    当 socket 连接后,返回远程客户端连接的本地 IP 地址字符串。

  • socket.localPort

    当 socket 连接后,返回用数字表示的本地端口。

  • socket.remoteAddress

    当 socket 连接后,返回用字符串表示的远程 IP 地址。

  • socket.remoteFamily

    当 socket 连接后,返回用字符串表示的远程 IP 协议族。'IPv4' 或 'IPv6'

  • socket.remotePort

    当 socket 连接后,返回用数字表示的远程端口。

示例代码

Server端代码:

//暂未尝试成功

Client端代码:

/*
本示例提供了一键启动TCP Client,实现网络数据发送接收的功能的示例代码。

注: 首先需要使用WiFi联网操作,然后绑定一个 button ,回调函数为 "onbtn"。
本示例可以结合WiFi一键联网示例,一键WiFi联网后获取网络数据。
*/

var page = {
    socket: 0,
    net: 0,
    /* 此方法在第一次显示窗体前发生 */
    onLoad: function (event) {

        net = require('net');  // 引入 net 
        socket = new net.Socket();  // 创建socket

        // 注册data事件,socket连接成功后,每当接收到数据时,将触发回调onData函数
        socket.on("data", this.onData); 

    },

    /* 此方法展示窗体前发生 */
    onShow: function (event) {

    },

    /*当connect 成功后,socket向服务器发送一条消息*/
    onConnect: function () {
        console.log('connect success');
        socket.write("hello,this is rtt");  //向服务器发送一条数据包
    },

    /* 每当接收到数据,将触发onData函数,该函数将接收到的数据打印出来*/
    onData: function (res) {
        console.log("receive data is : " + res);
    },

    /* 此方法展示窗体后发生 */
    onResume: function (event) {

    },

    /* 此方法关闭窗体前发生 */
    onExit: function (event) {

    },

    /* 当点击button 时,开始连接 tcp server */
    onbtn: function (event) {
        // socket 连接tcp server,连接成功调用onConnect函数
        socket.connect(1234, '192.168.10.178', this.onConnect);
    },
};
Page(page);
page = 0;

mqtt

提供了 基于发布/订阅范式的消息协议 的异步网络 API。

注:目前仅支持单实例。

引入方式:

var mqtt = require('mqtt');
- mqtt.Client(endpoint, options)

根据endpoint与options,创建一个MQTT Client。
返回:mqtt.client对象。

|  参数 |  类型 | 必填 | 说明 |
| - | - | - | - |
| endpoint | String | 是 | broker的URL地址 |
| options | Object | 否 | 设定选项 |
  • mqtt.connect(endpoint, options)

    根据endpoint与options,创建一个MQTT Client,并连接。 返回:mqtt.client对象。

    参数 类型 必填 说明
    endpoint String broker的URL地址
    options Object 设定选项

    其中options含有以下参数:

    参数 类型 必填 说明
    keepalive Number 设定keepalive时间,默认:60s
    clientId String 客户端ID,默认: 'rtthread' + 随机数(0~999999)
    clean Bool 当下线时,是否获取Qos 1Qos 2消息,默认: true
    reconnectPeriod Number 重连时间间隔,默认: 1000(ms)
    connectTimeout Number 等待连接确认消息ConnAck的最大时间,默认: 30*1000(ms)
    username String broker所需要的名称,如果有
    password String broker所需要的密码,如果有
    will Object 遗言设定

    其中will含有以下参数:

    参数 类型 必填 说明
    topic String 遗言发送目标Topic
    payload String Buffer
    qos Number 遗言的QoS级别,默认:0 ,范围(0~2)
    retain Boolean 设定遗言是否保留,默认: false

mqtt.client

  • client.connect()

    根据之前设定选项连接指定MQTT的Broker,连接成功时,将触发connect事件。

  • client.publish(topic, message, options, callback)

    推送消息。

    参数 类型 必填 说明
    topic String 指定需要推送消息的Topic
    message String/Buffer 需要推送的消息
    options Object 推送设定
    callback Function 在QoS处理完成时触发的回调函数,或者在下一个标记处激发(如果QoS为0)。如果客户端正在断开连接,则会发生错误。

    其中options含有以下参数:

    参数 类型 必填 说明
    qos Number QoS等级,默认:0
    dup Bool 重复标志 ,默认:false
    retain Bool 保存标志,默认:false
  • client.subscribe(topic, options, callback)

    订阅指定Topic。

    参数 类型 必填 说明
    topic String 指定订阅的Topic
    options Object 推送设定
    callback Function 订阅成功后的回调函数

    其中options含有以下参数:

    参数 类型 必填 说明
    qos Number QoS等级,默认:0
  • client.unsubscribe(topic, callback)

    取消订阅指定Topic。

    参数 类型 必填 说明
    topic String 指定取消订阅的Topic
    callback Function 取消订阅成功后的回调函数
  • client.end(callback)

    关闭Client。

    参数 类型 必填 说明
    callback Function 关闭Client成功后的回调函数
  • client.reconnect()

    根据之前的设定,重新连接。

  • connect

    当Client连接成功后,将触发connect事件

  • offline

    当client下线的时候,将触发offline事件

  • message

    当接受到一个publish的信息后,将触发message实现

    回调入参: | 参数 | 类型 | 说明 | | - | - | - | | topic | String | topic的名称 | | message | Buffer | 接受到内容 |

示例代码

/*
本实例 提供一个mqtt.client的测试例子,实现mqtt的发布订阅的功能。

注: 本实例需要在WiFi连接网络后操作。首先绑定两个 button 名为‘MQTT_publish’和‘MQTT_subscribe’,回调函数为 "onbtn"。
然后通过点击不同的button,执行发布和订阅的功能。

本例子以tongxinmao作为MQTT的服务器进行测试,使用MQTT.fx作为Client终端,当硬件设备连接上MQTT服务器后,
点击 'MQTT_publish'按键,则会向服务器发送主题为'hello'的消息"MQTT_publish test".
当MQTT.fx终端发送主题为'Topic_1'的消息时,硬件设备也能监听到并打印出来。
*/

var page = {

    /* 此方法在第一次显示窗体前发生 */
    onLoad: function (event) {
        var that = this;
        var mqttModule = require("mqtt"); //引入 mqtt 

        //创建MQTT Client
        this.client = mqttModule.Client("tcp://mq.tongxinmao.com:18831", { username: "admin", password: "admin" });
        // 如果服务器是IP地址,可直接输入形如mqttModule.Client("tcp://127.0.0.1:1883"..)的形式。

        //MQTT订阅一个Topic,名字为 'Topic_1'
        this.client.subscribe("Topic_1", { qos: 0 }, function () { 
            console.log("subcribe success") 
        });

        //监听MQTT订阅的消息回调函数,当接收到订阅的消息,则打印出来
        this.client.on("message", function (topic, message) {
            //绑定message事件的Listener            
            console.log(topic + " : " + message.toString());
        })

        this.client.on("offline", function () {
            //绑定offline事件的Listener            
            console.log("the client is offline");
        })

        this.client.on("connect", function () {
            //绑定connect事件的Listener            
            console.log("the client is connected");
        })

        this.client.connect();  //建立连接
    },

    /* 此方法展示窗体前发生 */
    onShow: function (event) {

    },

    /* 此方法展示窗体后发生 */
    onResume: function (event) {

    },

    /* 此方法关闭窗体前发生 */
    onExit: function (event) {

    },

    onbtn: function (event) {
        switch (event.target.id) {
            case "MQTT_publish":
                console.log("mqtt pub ");
                //往主题名为'hello'的Topic内发送消息'MQTT_publish test'
                this.client.publish("hello", "MQTT_publish test",{ qos:0 }, function () {
                    console.log("publish");
                })
                break;

            case "MQTT_subscribe":
                console.log("MQTT_subscribe");
                //订阅Topic
                this.client.subscribe("Topic_1", { qos: 0 }, function () {
                    console.log("subcribe success")
                });
                break;

            case "cancel_publish":
                // 取消订阅的消息,此时再发送Topic_1,将接收不到消息
                this.client.unsubscribe("Topic_1", function () {
                    console.log("Topic_1 is unsubscribe");
                });
                break;

            case "end":
                // 关闭client连接,此时将不能发布订阅消息
                this.client.end(function () {
                    console.log("client end");
                });
                break;

            case "recon":
                // 重新连接 之前连接过的matt服务器,连接之后便可以再次发布订阅消息
                this.client.reconnect(function () {
                    console.log("client reconnect");
                });
                break;

            default:
                break;

        }

    },
};

Page(page);
page = 0;