关闭

NodeMCU文档中文翻译 8 Websocket模块

标签: NodeMCU文档翻译websocket
355人阅读 评论(0) 收藏 举报
分类:

【转载请注明出处:http://blog.csdn.net/leytton/article/details/76217923


一、译文


Websocket客户端模块实现了 RFC6455 (版本 13)协议规范并且提供了简单的接口来收发消息.

本模块支持分片消息, 如果服务器无法响应会自动回复ping请求和定时ping.

SSL/TLS 支持

注意 net 模块 的约束条件.

websocket.createClient() 创建websocket客户端.
websocket.client:close() 关闭websocket 连接.
websocket.client:config(params) 配置websocket客户端实例.
websocket.client:connect() 与给定URL之间创建websocket连接.
websocket.client:on() 注册回调函数来处理websocket事件 (每个客户端同种事件类型只能创建一个回调函数).
websocket.client:send() 通过websocket连接发送消息.

websocket.createClient()

创建一个websocket客户端. 这个客户端可以保存到实例变量中并通过函数来处理事件.

当连接关闭, 同样的客户端是可以再次使用的 - 回调函数保持不变 - 你可以再次连接任何服务端.

在释放客户端实例前, 确保使用 ws:close().函数来关闭连接.

语法

websocket.createClient()

参数

返回值

websocketclient

示例代码

local ws = websocket.createClient()
-- ...
ws:close()
ws = nil

websocket.client:close()

关闭websocket 连接. 客户端发送一个关闭数据帧给服务器,尝试优雅地关闭连接. 如果服务器不应答, 超时后连接会关闭.

即使是websocket并未连接,这个函数也可以调用.

在客户端实例释放前必须调用此函数.

语法

websocket:close()

参数

返回值

nil

示例代码

ws = websocket.createClient()
ws:close()
ws:close() -- 不会发生任何事情

ws = nil -- 完全释放客户端实例,lua虚拟机会回收内存

websocket.client:config(params)

配置websocket客户端实例.

语法

websocket:config(params)

参数

  • params table 数据类型. 支持以下关键字:
  • headers table 数据类型,会附加到每次请求的头部

返回值

nil

示例代码

ws = websocket.createClient()
ws:config({headers={['User-Agent']='NodeMCU'}})

websocket.client:connect()

与给定URL之间创建websocket连接.

语法

websocket:connect(url)

参数

  • url websocket服务端URL.

返回值

nil

示例代码

ws = websocket.createClient()
ws:connect('ws://echo.websocket.org')

如果失败, 错误将会传递到回调函数 websocket:on("close", handler).

websocket.client:on()

注册回调函数来处理websocket事件 (每个客户端同种事件类型只能创建一个回调函数).

语法

websocket:on(eventName, function(ws, ...))

参数

  • eventName 注册回调函数事件名称. 这些事件可以是:connectionreceive 和 close.
  • function(ws, ...) 回调函数. 函数第一个参数一般为websocket客户端实例. 其他参数取决于事件类型. 查看示例代码获取更多信息. 如果为 nil, 则是取消之前该事件注册的回调函数.

返回值

nil

示例代码

local ws = websocket.createClient()
ws:on("connection", function(ws)
  print('got ws connection')
end)
ws:on("receive", function(_, msg, opcode)
  print('got message:', msg, opcode) -- opcode 为 1 则是文本消息, 为 2 则是二进制消息
end)
ws:on("close", function(_, status)
  print('connection closed', status)
  ws = nil -- 需要lua释放回收websocket客户端实例
end)

ws:connect('ws://echo.websocket.org')

注意如果产生了错误,close事件回调函数将会出发.

close事件状态码,如果不为0则表示错误, 详细描述如下表所示.

状态码 解释
0 用户关闭或者连接正常关闭
-1 URL格式错误
-2 主机名太长 (>256 字符)
-3 无效端口号 (必须 >0 且 <= 65535)
-4 主机名格式错误
-5 DNS找不到主机名
-6 服务器响应终止
-7 服务器发送无效HTTP响应(例如. 服务器发送错误的key值)
-8 to -14 内存不足无法接收消息
-15 服务器没有遵循FIN协议
-16 内存不足无法发送消息
-17 服务器不切换协议
-18 连接超时
-19 服务器不响应校验通信
-99 to -999 额,发生了一些不好的事

websocket.client:send()

通过websocket连接发送消息.

语法

websocket:send(message, opcode)

参数

  • message 要发送的数据.
  • opcode 可选设置操作码 (默认为: 1, 文本消息)

返回值

nil 如果websocket未连接则会返回错误

示例代码

ws = websocket.createClient()
ws:on("connection", function()
  ws:send('hello!')
end)
ws:connect('ws://echo.websocket.org')


二、原文

摘自https://nodemcu.readthedocs.io/en/master/en/modules/websocket/

Websocket Module

Since Origin / Contributor Maintainer Source
2016-08-02 Luís Fonseca Luís Fonseca websocket.c

A websocket client module that implements RFC6455 (version 13) and provides a simple interface to send and receive messages.

The implementation supports fragmented messages, automatically respondes to ping requests and periodically pings if the server isn't communicating.

SSL/TLS support

Take note of constraints documented in the net module.

websocket.createClient() Creates a new websocket client.
websocket.client:close() Closes a websocket connection.
websocket.client:config(params) Configures websocket client instance.
websocket.client:connect() Attempts to estabilish a websocket connection to the given URL.
websocket.client:on() Registers the callback function to handle websockets events (there can be only one handler function registered per event type).
websocket.client:send() Sends a message through the websocket connection.

websocket.createClient()

Creates a new websocket client. This client should be stored in a variable and will provide all the functions to handle a connection.

When the connection becomes closed, the same client can still be reused - the callback functions are kept - and you can connect again to any server.

Before disposing the client, make sure to call ws:close().

Syntax

websocket.createClient()

Parameters

none

Returns

websocketclient

Example

local ws = websocket.createClient()
-- ...
ws:close()
ws = nil

websocket.client:close()

Closes a websocket connection. The client issues a close frame and attemtps to gracefully close the websocket. If server doesn't reply, the connection is terminated after a small timeout.

This function can be called even if the websocket isn't connected.

This function must always be called before disposing the reference to the websocket client.

Syntax

websocket:close()

Parameters

none

Returns

nil

Example

ws = websocket.createClient()
ws:close()
ws:close() -- nothing will happen

ws = nil -- fully dispose the client as lua will now gc it

websocket.client:config(params)

Configures websocket client instance.

Syntax

websocket:config(params)

Parameters

  • params table with configuration parameters. Following keys are recognized:
  • headers table of extra request headers affecting every request

Returns

nil

Example

ws = websocket.createClient()
ws:config({headers={['User-Agent']='NodeMCU'}})

websocket.client:connect()

Attempts to estabilish a websocket connection to the given URL.

Syntax

websocket:connect(url)

Parameters

  • url the URL for the websocket.

Returns

nil

Example

ws = websocket.createClient()
ws:connect('ws://echo.websocket.org')

If it fails, an error will be delivered via websocket:on("close", handler).

websocket.client:on()

Registers the callback function to handle websockets events (there can be only one handler function registered per event type).

Syntax

websocket:on(eventName, function(ws, ...))

Parameters

  • eventName the type of websocket event to register the callback function. Those events are:connectionreceive and close.
  • function(ws, ...) callback function. The function first parameter is always the websocketclient. Other arguments are required depending on the event type. See example for more details. If nil, any previously configured callback is unregistered.

Returns

nil

Example

local ws = websocket.createClient()
ws:on("connection", function(ws)
  print('got ws connection')
end)
ws:on("receive", function(_, msg, opcode)
  print('got message:', msg, opcode) -- opcode is 1 for text message, 2 for binary
end)
ws:on("close", function(_, status)
  print('connection closed', status)
  ws = nil -- required to lua gc the websocket client
end)

ws:connect('ws://echo.websocket.org')

Note that the close callback is also triggered if any error occurs.

The status code for the close, if not 0 then it represents an error, as described in the following table.

Status Code Explanation
0 User requested close or the connection was terminated gracefully
-1 Failed to extract protocol from URL
-2 Hostname is too large (>256 chars)
-3 Invalid port number (must be >0 and <= 65535)
-4 Failed to extract hostname
-5 DNS failed to lookup hostname
-6 Server requested termination
-7 Server sent invalid handshake HTTP response (i.e. server sent a bad key)
-8 to -14 Failed to allocate memory to receive message
-15 Server not following FIN bit protocol correctly
-16 Failed to allocate memory to send message
-17 Server is not switching protocols
-18 Connect timeout
-19 Server is not responding to health checks nor communicating
-99 to -999 Well, something bad has happenned

websocket.client:send()

Sends a message through the websocket connection.

Syntax

websocket:send(message, opcode)

Parameters

  • message the data to send.
  • opcode optionally set the opcode (default: 1, text message)

Returns

nil or an error if socket is not connected

Example

ws = websocket.createClient()
ws:on("connection", function()
  ws:send('hello!')
end)
ws:connect('ws://echo.websocket.org')



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

NodeMCU文档中文翻译 6 MQTT模块

一、译文  MQTT客户端支持Mqtt3.1.1协议,要确保你的MQTT服务器配置正确并支持3.1.1版本。此Mqtt模块并不兼容3.1版本之前的MQTT服务器。 mqtt.Client() 创建一个...
  • Leytton
  • Leytton
  • 2017-05-18 00:28
  • 1410

物联网之 NodeMCU:无线灌溉控制器

物联网之 NodeMCU UI:珠翠罗绮    2017年10月24日星期二 《使用mongoos-os系列》   目  录   一、 NodeMCU的选择 3 二、 固件的选择 3 三、 UI(用户...
  • fengyu09
  • fengyu09
  • 2017-10-24 14:57
  • 356

NodeMCU文档中文翻译 2 首页

一、译文  1、NodeMCU文档  NodeMCU是基于ESP8266 WiFi SOC(来自Espressif)的eLua固件,固件基于espressif non-os SDK并且使用基于sp...
  • Leytton
  • Leytton
  • 2016-06-20 18:05
  • 1679

NodeMCU文档中文翻译 3 构建固件

一、译文  主要有三种方法来构建NodeMCU固件:云端构建服务、Docker 镜像和专门的Linux环境(可能是虚拟机)。 1、手动构建 注意,默认配置的C文件头(user_config.h,...
  • Leytton
  • Leytton
  • 2016-06-20 18:40
  • 1553

NodeMCU文档中文翻译 7 DHT温湿度传感器模块

一、序言 DHT11 温湿度模块传感器 资料下载 一 描述 1 可以检测周围环境的湿度和温度 2 传感器采用DHT11 3 湿度测量范围:20%-95%(0度-5
  • Leytton
  • Leytton
  • 2017-07-27 12:08
  • 763

NodeMCU文档中文翻译 4 烧写固件

一、译文  Adafruit 提供了非常好的固件烧写教程 。下面你会发现两个流行的基本工具esptool和NodeMCU Flasher。 注意:记住ESP8266在烧写新固件前需要放入烧写模块。 ...
  • Leytton
  • Leytton
  • 2016-06-20 20:04
  • 3839

NodeMCU文档中文翻译 5 上传代码

一、译文  与烧写一样,这里有好几种方法来从计算机上传代码到设备当中。 注意NodeMCU串口接口在启动时使用115200波特率,为了在启动后改变速率,可以使用uart.setup(0,9600,8,...
  • Leytton
  • Leytton
  • 2016-06-20 21:31
  • 2473

基于esp8266的nodemcu模块从白痴到不太白痴

esp8266 芯片是乐鑫(espressif)产的,安信可公司用这芯片做出了模组即封装好的小模块,就是下图的小模块,有很多型号,我没买这种。 我买的是下面这种,也就是上图的模块加个USB转串口底板。...
  • weixin_38337949
  • weixin_38337949
  • 2017-04-15 19:42
  • 1882

NodeMCU:烧写固件及连接WIFI

最近想做一个基于WIFI的智能开关,所以就买了这个开发板。今天刚那到手,在这之前从未接触过这个开发板还好有万能的度娘在;以下是对NodeMCU开发板烧写固件及连接WIFI过程的记录。 在开始之前需要...
  • xuwq2015
  • xuwq2015
  • 2017-02-12 19:03
  • 5133

MySQL官方文档 — InnoDB多版本控制译文

前言本篇文章为MySQL官方文档 — InnoDB多版本控制的译文,官方文档地址,纯平自己粗浅的英语功底和翻译软件进行翻译,如有问题,欢迎指正。14.3 InnoDB多版本控制InnoDB是一个多版本...
  • heroqiang
  • heroqiang
  • 2018-01-10 09:31
  • 35
    个人资料
    • 访问:322868次
    • 积分:4742
    • 等级:
    • 排名:第7095名
    • 原创:110篇
    • 转载:39篇
    • 译文:22篇
    • 评论:132条
    博客专栏
    最新评论