关于 serverpod-server-events
Serverpod Server Events 为 Serverpod 服务端提供基于命名频道的消息传递,供构建服务端事件通信的开发者使用。消息可在本机传递,也可在启用 Redis 时跨集群传递。
主要功能
- 01向命名频道发布可序列化消息
- 02按本地或全局范围投递
- 03通过 Stream 接收消息
- 04注册和移除频道监听器
- 05会话关闭时清理监听器
适用场景
- 01在服务端广播用户更新
- 02仅在当前服务器实例传递事件
- 03通过 Redis 在集群间发送事件
- 04用类型化 Stream 处理事件消息
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ serverpod/ serverpod --skill serverpod-server-events安装后在 Claude Code 中输入/serverpod-server-events确认已加载。
详细介绍
Serverpod 服务端事件
通过命名频道上的 session.messages 进行事件消息传递。消息必须是可序列化模型。默认情况下(MessageScope.auto),启用 Redis 时,消息会在集群范围内传递;否则仅在服务器实例内传递。
发送
await session.messages.postMessage('user_updates', UserUpdate(...));
// Restrict delivery with a scope:
await session.messages.postMessage('user_updates', message, scope: MessageScope.local);
await session.messages.postMessage('user_updates', message, scope: MessageScope.global);
MessageScope.local 仅在此服务器内同步传递。MessageScope.global 需要 Redis;如果未启用 Redis,则会抛出 StateError。启用 Redis 时,消息会以异步、尽力而为的方式传递,监听器接收到的是消息的反序列化副本,而非已发布的实例。
接收
流:
var stream = session.messages.createStream<UserUpdate>('user_updates');
stream.listen((message) => print('Received: $message'));
如果频道上的消息不是类型 T,流会发出错误。请使用确切的可序列化类型,或有意使用共享基类型。
监听器:
session.messages.addListener<UserUpdate>('user_updates', (message) {
print('Received: $message');
});
两者都会接收本地和全局消息。会话关闭时,流和监听器会被移除。可通过 session.messages.removeListener(channel, callback) 手动移除。模型支持继承,这在需要为服务端事件提供完全类型化的接口时很有用。
评论
支持 Markdown