Skip to content

websocketserver — WebSocket 服务器 ​

模块名:websocketserver

在设备上启动一个 WebSocket 服务器,供浏览器页面实时连接。Lua 侧的接口只有一个 creat,调用即启动,之后所有协议交互都在固件内部完成,脚本里不能收发消息。

它的主要用途是给设备的内置 Web 页面(云组态、在线调试)提供实时通道。设备在线调试时 print 的输出也会重定向到已连接的 WebSocket。

安全提示:本模块不提供认证。任何能访问该端口的浏览器都能建立连接。部署到公网前请用防火墙或端口映射策略限制来源。

函数总览 ​

库级函数 ​

函数作用
websocketserver.creat([port])创建并立即启动 WebSocket 服务器

对象方法 ​

无。对象只有 __gc,被垃圾回收时自动停止服务器。没有 send / stop / broadcast / reg 之类的方法。


websocketserver.creat ​

lua
websocketserver.creat([port]) --> server

创建并立即启动 WebSocket 服务器。不需要(也没有)额外的 start。

参数

#参数类型必填默认值说明
1portinteger否80监听端口

返回值

类型说明
userdata服务器对象。必须用变量长期持有,被 GC 回收时服务器会立即停止

示例

lua
-- 用全局变量持有,防止被回收
wss = websocketserver.creat(8000)

说明

  • 忘记接住返回值(写成 websocketserver.creat(8000))时,对象随时可能被 GC,服务器会莫名停止。这是本模块最常见的问题。
  • 默认端口 80 可能和设备内置的 HTTP 服务冲突,自建服务建议换一个端口。

注意事项 ​

  • 只有 creat 一个函数,脚本无法主动推送或接收 WebSocket 消息。需要脚本可控的双向通道请用 tcp_server。
  • 返回的对象必须长期持有,否则服务器会随 GC 停止。
  • 没有认证机制,暴露到公网前请做网络层限制。

例程 ​

本模块只有 creat 一个函数:调用即启动,脚本不能主动收发消息(交互由内置 Web 页面完成)。 唯一要点是必须长期持有返回的对象。统一模板「场景 / 完整代码 / 要点 / 验证方法 / 注意事项」。

例程 1:启动调试 WebSocket(让 print 输出可见) ​

适用:LP3201 / LP3202 / LP3203 / LP3222 / LP3232 / LP3288 / 软PLC模拟器 | 依赖模块:websocketserver | 难度:★☆☆

场景:设备在线调试时,print 的输出会重定向到已连接的 WebSocket;启动一个调试服务,浏览器就能实时看到脚本日志。

完整代码(可直接下载运行):

lua
-- 必须用一个变量接住返回值,否则对象被 GC 后服务器立即停止
wss = websocketserver.creat(8000)
print("WebSocket 调试已起,浏览器连 ws://设备IP:8000 看日志")

要点:

  • creat 即启动,没有 start / send / reg 之类的方法。
  • 返回对象必须用变量长期持有,被 GC 回收时服务器立即停。

验证方法:

  1. 浏览器打开 ws://设备IP:8000(或用上位机内置调试页),脚本里的 print 实时出现。
  2. 设备其它脚本的日志也能在这里看到。

注意事项:

  • 默认端口 80 与设备内置 HTTP 服务冲突,自建服务建议换端口(如 8000)。
  • 没有认证机制,暴露公网前请用防火墙限制来源。

例程 2:给内置 Web 页面提供实时通道 ​

适用:同上 | 依赖模块:websocketserver | 难度:★☆☆

场景:设备的云组态 / 在线调试页面需要实时数据通道,启动一个 WebSocket 服务即可,具体交互由页面侧完成。

完整代码(可直接下载运行):

lua
wss = websocketserver.creat(8000)   -- 内置页面会复用这个通道

要点:

  • 脚本侧不能收发 WebSocket 消息,双向交互在页面里做。
  • 仍要持有 wss,否则通道随 GC 消失。

验证方法:打开内置 Web 页面,数据能实时刷新即说明通道正常。

注意事项:想要"脚本可控的双向通道"请用 tcp_server,本模块做不到。


例程 3:注意事项——忘记持有导致服务器被 GC 停止 ​

适用:同上 | 依赖模块:websocketserver | 难度:★☆☆

场景:最常见的错误写法:调用 creat 不接返回值,服务器运行片刻就停。

完整代码(可直接下载运行):

lua
-- ❌ 错误:返回值没接住,对象随时被回收,服务器莫名停止
websocketserver.creat(8000)

-- ✅ 正确:用全局变量持有
wss = websocketserver.creat(8000)

要点:

  • 本模块只有 creat,返回对象必须长期持有,GC 时机不可控。
  • 表现为"连上一会儿就没了",排查时第一反应检查是不是没接住返回值。

验证方法:正确写法下浏览器能稳定持续连上;错误写法连上几秒后断。

注意事项:别写成 websocketserver.creat(8000) 不赋值;也别用局部变量(脚本跑完就出作用域被回收)。

LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研