sgcWebSockets 2026.10

· 版本发布
sgcWebSockets 2026.10

sgcWebSockets 2026.10 发布了。这个版本贯穿着两条主线:sgcHTML 补齐了一个商业级 Web 应用需要的部分,让你不用再手写这些代码;密码学也在没有引入任何一个外部库的情况下迈向了后量子时代。

Web 应用:繁琐的部分,搞定了

会话、登录与 CSRF。新的 TsgcHTMLAuth 组件及其会话存储负责维护 cookie、响应登录和登出请求、关闭空闲会话,并对失败的登录进行限流。CSRF 令牌放在一个 meta 标签里,htmx 会自动把它加到每个请求上,服务器则会拒绝不携带它的 post 请求。

FAuth := TsgcHTMLAuth.Create(Self);
FAuth.SessionStore := TsgcHTMLSessionStore_Memory.Create(Self);
FAuth.CookieName := 'app_session';
FEngine.Auth := FAuth;

读起来就像路由的路由。路径参数、方法过滤器,以及对请求头、cookie 和请求体的访问:

with FRouter.Routes.Add do
begin
  Path := '/customers/{id}/edit';
  Methods := [hrmGet, hrmPost];
  RequireLogin := True;
  RequireRoles := 'admin,sales';
end;

可以测试的页面。DispatchDirect 可以在没有底层 socket 的情况下应答一个请求,一个新的单元会读取生成的 HTML,按 id、类、标签或属性查找元素,并把一个页面与保存的副本进行比较,这样标记中一次无意的改动会被测试发现,而不是被客户发现。

感觉像原生应用的导航。页面切换不需要完全重新加载,并会保留滚动位置和用户正在输入的内容,还带有加载进度条、连接断开时的提示框,以及请求失败时的消息。所有这些功能默认都是关闭的。

四个重点新功能

每一项都有单独的文章介绍,链接在文末,这里只说它是什么:

推送,两种方式

服务器发送事件(server sent events)现在可以取代 WebSocket 来传送更新,并能在断线期间重放错过的内容,而且它可以配合普通的 HTTP 服务器工作。Web Push 则可以触达一个已经关闭的浏览器。它们还带来了一个通知收件箱和一个偏好设置表,通知组件会决定某个用户走哪条通道。

AI:可以直接拿来用的答案

TsgcAIChat 现在可以通过新的 ChatJSON 方法,在 OpenAI、Anthropic、Gemini、DeepSeek、Ollama、Grok 和 Mistral 上请求遵循你提供的 schema 的 JSON;该方法会解析返回结果,当解析失败时会附上解析错误再问一次。聊天组件现在也能发送和接收图片了,而且 BaseUrl 现在对每个提供商都生效,而不再只对 Ollama 生效,这样它们中的任何一个都可以指向一个代理或本地网关。

密码学:用 Object Pascal 实现的后量子能力

ML-KEM(FIPS 203)、ML-DSA(FIPS 204)和 SLH-DSA(FIPS 205)、X-Wing 混合密钥封装、后量子 X.509 证书与证书颁发机构,以及用 ML-DSA 签名的 JWT。这一切都用 Object Pascal 写在 sgcCrypto 包里,不依赖任何外部库,并针对 NIST 的已知答案向量做了验证。

在此之上是一个原生 TLS 1.3 引擎,同样是纯 Pascal 实现:客户端或服务器无需 OpenSSL、也无需 SChannel 就能进行 TLS 通信,协商 RFC 10024 中的混合后量子分组,并支持 ALPN、S N I、客户端证书,以及可选地使用操作系统的信任存储。

经典算法也在同一轮改动中得到了加固:带盲化的常数时间 RSA、常数时间的椭圆曲线标量乘法与 Ed25519、无查找表的 AES 和 GHASH、导入的私钥会与其公钥部分做校验,以及拒绝非最小编码的 DER 签名。

值得一提的修复

.NET

.NET 库同步跟进:为 ASP.NET Core 提供 ClaimsPrincipal 桥接的身份验证与会话管理、路由器、测试辅助工具、SPA 导航、带原生端点的 SSE 传输、结构化输出、AI Data Pack、Web Push、MCP Apps,以及带适配器的 CRUD 组件,全部使用与 Delphi 相同的 API 名称。

升级

所有新增功能都是增量式的,并且默认关闭。加入新的单元、重新编译你的包,现有应用的行为将与之前完全一致。

完整版文章

观看视频

关于此功能的简短视频发布在eSeGeCe 频道上。

有问题、反馈,或需要迁移方面的帮助?欢迎联系我们 — 你会收到编写这些代码的人的回复。