易语言最好用的-web-服务器模块”>易_WEB 2026 — 易语言最好用的 Web 服务器模块
3行代码启动一个高性能Web服务器,告别HP-Socket的繁琐回调。

它是什么
把 Go 语言(Gin 框架)封装成了一个 DLL,让你在易语言里也能写出高性能的 Web 服务。

核心特点:

协程级高并发 — 底层是编译型 Go 语言,比纯易语言快几十倍
7×24小时稳定运行 — 自动防崩溃、自动回收内存、超时自动清理
中文命令一看就会 — 易_WEB.启动()、易_WEB.注册_GET(),不用记英文
支持字节集和文件上传 — 二进制数据、图片上传、加密包收发统统搞定
别人写几百行 HP-Socket 回调,你只要 2 行:

易_WEB.注册_GET (“/”, &处理_主页)
易_WEB.启动 (8080, 真)
‘ 浏览器打开 http://127.0.0.1:8080 就能用了
为什么选它
对比项 纯易语言 HP-Socket 易_WEB 2026
写一个接口 几十行回调代码 3行搞定
多线程卡死界面 经常要自己处理 完全不会卡
内存泄漏 手动管理指针 自动回收
中文乱码 自己转码 自动 GBK 转 UTF8
并发能力 几百就吃力 轻松支持上万
崩溃风险 一个异常全崩 异常自动恢复
30秒快速上手
第1步:打开源码
用易语言打开 易_WEB.e,DLL 已经嵌入在程序资源里,通过”内存加载 DLL”自动加载,不需要单独放 DLL 文件。

第2步:写代码
.子程序 _启动子程序
.局部变量 端口, 整数型

端口 = 8080

‘ 注册路由(把网址绑定到你的子程序)
易_WEB.注册_GET (“/”, &处理_主页)
易_WEB.注册_GET (“/hello”, &处理_你好)
易_WEB.注册_POST (“/api/login”, &处理_登录)

‘ 启动服务器(瞬间返回,不会卡死界面)
易_WEB.启动 (端口, 真)

调试输出 (“服务器已启动:http://127.0.0.1:” + 到文本 (端口))
延时 (999999999) ‘ 控制台程序用这行防止退出,窗口程序不需要

‘ 下面是处理子程序,每个都必须有 ID 和 路径 两个参数

.子程序 处理_主页
.参数 ID, 整数型
.参数 路径, 文本型

易_WEB.响应_发送文件 (ID, “./index.html”) ‘ 直接返回网页文件

.子程序 处理_你好
.参数 ID, 整数型
.参数 路径, 文本型

易_WEB.响应_发送文本 (ID, “你好!易_WEB运行正常!”, )

.子程序 处理_登录
.参数 ID, 整数型
.参数 路径, 文本型
.局部变量 用户名, 文本型
.局部变量 密码, 文本型

用户名 = 易_WEB.取_表单参数 (ID, “user”)
密码 = 易_WEB.取_表单参数 (ID, “pass”)

.如果 (用户名 = “admin” 且 密码 = “123456”)
易_WEB.响应_发送JSON (ID, “{” + #引号 + “code” + #引号 + “:200,” + #引号 + “msg” + #引号 + “:” + #引号 + “登录成功” + #引号 + “}”)
.否则
易_WEB.响应_发送JSON (ID, “{” + #引号 + “code” + #引号 + “:401,” + #引号 + “msg” + #引号 + “:” + #引号 + “密码错误” + #引号 + “}”)
.如果结束
就这么简单,运行后浏览器访问 http://127.0.0.1:8080 就能看到效果。

所有功能一览
服务器控制
命令 说明
易_WEB.启动 (端口, 是否日志) 启动服务器,瞬间返回不卡界面
易_WEB.停止 () 优雅关闭,等当前请求处理完
易_WEB.是否运行中 () 返回真或假
易_WEB.设置最大请求体 (MB) 上传大文件前设置,默认32MB
易_WEB.设置请求超时 (秒) 超时自动返回504,防内存泄漏,默认30秒
路由注册
命令 说明
易_WEB.注册_GET (路径, &子程序) 普通网页访问
易_WEB.注册_POST (路径, &子程序) 表单提交或API接口
易_WEB.注册_PUT (路径, &子程序) RESTful 更新
易_WEB.注册_DELETE (路径, &子程序) RESTful 删除
易_WEB.注册_静态目录 (URL, 本地路径) 映射文件夹,比如 /img 映射到 ./images
易_WEB.注册_静态文件 (URL, 文件路径) 映射单个文件,比如 /favicon.ico
易_WEB.注册_代理 (“/api”, “http://127.0.0.1:9000”) 反向代理,把请求转发到其他服务器
易_WEB.注册_负载均衡 (“/api”, “http://1.1.1.1:9000\|http://2.2.2.2:9000”) 多后端轮询,做集群
易_WEB.注册_SSE (“/events”, &处理_SSE) SSE服务器推送,服务端主动发数据给客户端
路由支持参数:注册 /user/:id,访问 /user/123 时用 取_路由参数(ID, “id”) 就能拿到 “123”。

反向代理和负载均衡不需要写回调,Go底层直接转发,性能很高。后端挂了会自动返回502,不会崩溃。

获取请求信息
命令 说明
取_URL参数 (ID, 参数名) 获取 ?id=123 里的参数
取_表单参数 (ID, 参数名) 获取 POST 表单值
取_路由参数 (ID, 参数名) 获取 /user/:id 里的参数
取_JSON内容 (ID) 获取请求体(文本)
取_请求体字节集 (ID) 获取请求体(字节集),用于二进制、加密包、文件
取_请求方法 (ID) GET、POST、PUT、DELETE
取_客户端IP (ID) 访问者 IP
取_浏览器标识 (ID) UserAgent
取_请求头 (ID, 键名) 任意请求头
取_内容长度 (ID) 请求体大小
发送响应
命令 说明
响应_发送文本 (ID, 内容, 状态码) 普通文字
响应_发送JSON (ID, JSON) JSON 数据(自动设置响应头)
响应_发送HTML (ID, HTML) 网页
响应_发送字节集 (ID, 数据, 状态码) 图片、验证码、二进制数据
响应_发送文件 (ID, 路径) 发送本地文件(支持断点续传)
响应_置协议头 (ID, 键名, 键值) 自定义响应头(发送前调用)
响应_重定向 (ID, URL, 状态码) 301或302跳转
响应_中止 (ID, 状态码) 中止请求
Cookie 支持
命令 说明
取_Cookie (ID, 名称) 读取 Cookie
置_Cookie (ID, 名称, 值, 有效期秒) 设置 Cookie(简化版)
置_Cookie完整 (ID, 名称, 值, 有效期, 路径, 域名, 仅HTTPS, HttpOnly) 全属性设置
文件上传
命令 说明
取_上传文件数 (ID) 本次上传了几个文件
取_上传文件名 (ID, 索引) 原始文件名
取_上传文件字节集 (ID, 索引) 文件内容(字节集)
取_上传文件大小 (ID, 索引) 文件大小
工具函数
命令 说明
取_版本号 () 模块版本
取_活跃连接数 () 当前正在处理的请求数
常用场景代码
场景1:接收字节集
.子程序 处理_接收二进制
.参数 ID, 整数型
.参数 路径, 文本型
.局部变量 数据, 字节集
.局部变量 长度, 整数型

‘ 直接拿到 POST 的二进制数据,不用管编码
数据 = 易_WEB.取_请求体字节集 (ID)
长度 = 取字节集长度 (数据)

‘ 保存为文件
写到文件 (“./received.bin”, 数据)

易_WEB.响应_发送JSON (ID, “{” + #引号 + “size” + #引号 + “:” + 到文本 (长度) + “}”)
场景2:文件上传
.子程序 处理_文件上传
.参数 ID, 整数型
.参数 路径, 文本型
.局部变量 文件数, 整数型
.局部变量 i, 整数型
.局部变量 文件名, 文本型
.局部变量 文件数据, 字节集

文件数 = 易_WEB.取_上传文件数 (ID)

.计次循环首 (文件数, i)
文件名 = 易_WEB.取_上传文件名 (ID, i - 1)
文件数据 = 易_WEB.取_上传文件字节集 (ID, i - 1)
写到文件 (“./upload_” + 文件名, 文件数据)
.计次循环尾 ()

易_WEB.响应_发送JSON (ID, “{” + #引号 + “code” + #引号 + “:200,” + #引号 + “files” + #引号 + “:” + 到文本 (文件数) + “}”)
场景3:发送图片(字节集响应)
.子程序 处理_图片
.参数 ID, 整数型
.参数 路径, 文本型
.局部变量 图片数据, 字节集

图片数据 = 读入文件 (“./logo.png”)

‘ 先告诉浏览器这是 PNG,再发字节集
易_WEB.响应_置协议头 (ID, “Content-Type”, “image/png”)
易_WEB.响应_发送字节集 (ID, 图片数据, )
场景4:Cookie 登录态
.子程序 处理_登录
.参数 ID, 整数型
.参数 路径, 文本型
.局部变量 用户名, 文本型

用户名 = 易_WEB.取_表单参数 (ID, “user”)

‘ 登录成功,设置 Cookie 有效期1天(86400秒)
易_WEB.置_Cookie (ID, “login_user”, 用户名, 86400)
易_WEB.响应_发送JSON (ID, “{” + #引号 + “code” + #引号 + “:200}”)
场景5:跨域 CORS(前端调用不报错)
.子程序 处理_API
.参数 ID, 整数型
.参数 路径, 文本型

易_WEB.响应_置协议头 (ID, “Access-Control-Allow-Origin”, “*”)
易_WEB.响应_置协议头 (ID, “Access-Control-Allow-Methods”, “GET, POST, PUT, DELETE”)
易_WEB.响应_发送JSON (ID, “{” + #引号 + “code” + #引号 + “:200}”)
场景6:RESTful 路由参数
‘ 注册时写 /user/:id
易_WEB.注册_GET (“/user/:id”, &处理_用户)

.子程序 处理_用户
.参数 ID, 整数型
.参数 路径, 文本型
.局部变量 用户ID, 文本型

‘ 访问 /user/123 时,取到 “123”
用户ID = 易_WEB.取_路由参数 (ID, “id”)
易_WEB.响应_发送文本 (ID, “用户ID:” + 用户ID, )
场景7:反向代理(把 /api 转发到后端服务)
不用写回调,一行搞定,Go底层直接转发,性能很高:

‘ 把 /api 开头的请求全部转发到 9000 端口的后端服务
‘ 访问 http://你的IP:8080/api/login -> http://127.0.0.1:9000/login
易_WEB.注册_代理 (“/api”, “http://127.0.0.1:9000”)
场景8:负载均衡(多台服务器轮询,做集群)
多个后端地址用 | 分隔,请求自动轮询分发:

‘ 两台后端服务器轮询,挂了一台自动转发到另一台
易_WEB.注册_负载均衡 (“/api”, “http://192.168.1.10:9000|http://192.168.1.11:9000”)
后端挂了会自动返回502错误,不会导致整个服务崩溃。

场景9:SSE服务器推送(服务端主动发数据给客户端)
SSE比WebSocket轻量,适合服务端单向推送(实时消息、日志推送、进度通知等)。浏览器原生支持,不需要额外库。

‘ 注册SSE路由
易_WEB.注册_SSE (“/events”, &处理_SSE连接)

.子程序 处理_SSE连接
.参数 连接ID, 整数型
.参数 路径, 文本型

‘ 连接建立后,可以随时发送事件
易_WEB.发送_SSE事件 (连接ID, “message”, “欢迎连接!”)

‘ 模拟持续推送(实际项目里可以在定时器或线程里发)
.计次循环首 (10, i)
易_WEB.发送_SSE事件 (连接ID, “update”, “第” + 到文本 (i) + “条消息”)
延时 (1000)
.计次循环尾 ()

‘ 发送完关闭连接
易_WEB.关闭_SSE连接 (连接ID)
前端JavaScript代码:

const evtSource = new EventSource(“/events”);
evtSource.addEventListener(“message”, (e) => {
console.log(“收到消息:”, e.data);
});
evtSource.addEventListener(“update”, (e) => {
console.log(“收到更新:”, e.data);
});
SSE注意事项:

回调里不要做太耗时的操作,建议在易语言线程或定时器里发送事件
长时间保持连接建议每15秒发一次心跳:易_WEB.发送_SSE心跳 (连接ID)
客户端断开会自动清理,不需要手动处理
用 易_WEB.取_SSE连接数 () 可以查看当前有多少连接
稳定性保障
做 Web 服务最怕什么?跑着跑着就崩溃了、内存泄漏越来越大、某个异常导致整个程序退出。

易_WEB 做了 6 层防护:

防护机制 说明
异常自动恢复 任何代码异常都不会让进程崩溃,自动记录错误日志
请求超时清理 30秒没响应自动返回504并释放资源,防止内存泄漏
上下文自动管理 每个请求结束自动释放所有临时内存,不用手动管指针
优雅关闭 停止() 会等当前请求处理完,不会粗暴中断用户
连接超时 读、写、空闲超时都已设置,死连接不会一直占资源
原子ID管理 高并发下请求ID不会冲突
开启日志后,如果出问题会自动生成 gin_server.log(运行日志)和 gin_panic.log(崩溃日志),方便排查。

使用注意事项
以下是实际使用中容易踩的坑,建议仔细阅读:

1. 高并发回调需要加锁
Go 底层是协程并发的,多个请求会同时调用你的处理子程序。易语言本身不是线程安全的,如果在处理子程序里使用了全局变量、写文件、操作数据库等共享资源,建议加锁保护,否则可能出现数据错乱。

简单示例:

.程序集变量 锁, 整数型

.子程序 处理_请求
.参数 ID, 整数型
.参数 路径, 文本型

进入许可区 (锁)
‘ 这里操作全局变量或共享资源
离开许可区 (锁)
2. 耗时逻辑建议用线程池,并调大超时
如果你的业务逻辑很耗时(比如超过10秒),建议在易语言里用线程池处理,不要阻塞回调。但需要注意:默认请求超时是30秒,超过后上下文会被自动回收,再发响应会无效。

如果确实需要处理超过30秒的请求,启动前调用:

易_WEB.设置请求超时 (120) ‘ 设置为120秒
3. 请求体可以多次读取(v3.1修复)
v3.0及之前版本,取_JSON内容 和 取_请求体字节集 只能调用一个,第二个会返回空。v3.1已经修复,请求体会自动缓存,两个都可以正常调用。

4. 启动时检查返回值
启动() 现在返回逻辑型,真=启动成功,假=启动失败(最常见的原因是端口被占用)。建议检查返回值:

.如果 (易_WEB.启动 (8080, 真) = 假)
调试输出 (“启动失败:” + 易_WEB.取_启动错误 ())
.否则
调试输出 (“启动成功”)
.如果结束
5. 响应_发送JSON 的状态码
响应_发送JSON 现在支持自定义HTTP状态码了,默认200。注意区分”HTTP状态码”和”业务状态码”:

HTTP状态码:表示请求是否成功,200=成功,401=未授权,500=服务器错误
业务状态码:你自己定义在JSON body里的code字段,比如 {“code”:401,”msg”:”密码错误”}
建议HTTP状态码和业务码保持一致,或者HTTP统一用200,业务码放body里,二选一,不要混用。

6. 上传文件名要做安全处理
上传的文件名是客户端传的,可能包含特殊字符或路径穿越。不要直接用客户端文件名拼路径保存,建议:

.局部变量 文件名, 文本型
.局部变量 保存路径, 文本型

文件名 = 易_WEB.取_上传文件名 (ID, 0)
‘ 简单处理:只取文件名部分,过滤路径分隔符
文件名 = 子文本替换 (文件名, “\”, “”, , , 真)
文件名 = 子文本替换 (文件名, “/”, “”, , , 真)
‘ 或者直接用时间戳重命名
保存路径 = “./upload_” + 到文本 (取现行时间戳 ()) + “_” + 文件名
写到文件 (保存路径, 文件数据)
7. 最大请求体限制所有请求
设置最大请求体() 现在会限制所有请求的body大小,包括普通POST和文件上传,默认32MB。超过限制会返回413错误。

8. 数据库操作直接用易语言
有朋友问能不能加MySQL支持。建议直接在易语言回调里用易语言自带的MySQL支持库操作数据库,不需要在Web服务器层封装:

.子程序 处理_登录
.参数 ID, 整数型
.参数 路径, 文本型
.局部变量 用户名, 文本型
.局部变量 密码, 文本型
.局部变量 SQL, 文本型

用户名 = 易_WEB.取_表单参数 (ID, “username”)
密码 = 易_WEB.取_表单参数 (ID, “password”)

‘ 直接用易语言的MySQL支持库
SQL = “SELECT * FROM users WHERE username='” + 用户名 + “‘”
‘ 执行你的MySQL查询…
易_WEB.响应_发送JSON (ID, “{“”code””:0,””msg””:””登录成功””}”, )
这样做的好处:你熟悉的易语言数据库命令直接用,连接管理、记录集操作都在易语言里,灵活可控。Web服务器只负责收发HTTP,各司其职。

常见问题
问:会卡死易语言界面吗?

答:完全不会。调用 启动() 后瞬间返回,Web 服务器在后台 Go 协程里运行,主界面该干嘛干嘛。

问:中文乱码怎么办?

答:模块内部已经自动处理了 GBK 和 UTF8 的所有转换,你像平时一样写易语言代码就行,不用管编码。

问:能承受多少并发?

答:底层是 Go 协程,单机轻松支持上万并发。如果你的易语言业务逻辑很耗时,建议在易语言里用线程池处理,别阻塞回调。

问:DLL 怎么嵌入 EXE?发布不想带 DLL 文件。

答:用”内存加载 DLL”模块,把 DLL 加入程序资源,启动时用 内存加载DLL() 加载就行,发布时只有一个 EXE。

问:上传大文件报错怎么办?

答:默认最大32MB,启动前调用 易_WEB.设置最大请求体(100) 就能改成100MB。

问:怎么停止服务器?

答:调用 易_WEB.停止() 就行,会优雅关闭,等当前请求处理完再退出。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系贝贝进行处理。
本站默认解压密码:www.hibbba.com