mcpField
S
serverpod-server-events

serverpod-server-events

github.com/serverpod开发3.3k43 次安装1 天前更新
代码仓库

关于 serverpod-server-events

Serverpod Server Events 为 Serverpod 服务端提供基于命名频道的消息传递,供构建服务端事件通信的开发者使用。消息可在本机传递,也可在启用 Redis 时跨集群传递。

主要功能

  1. 01向命名频道发布可序列化消息
  2. 02按本地或全局范围投递
  3. 03通过 Stream 接收消息
  4. 04注册和移除频道监听器
  5. 05会话关闭时清理监听器

适用场景

  1. 01在服务端广播用户更新
  2. 02仅在当前服务器实例传递事件
  3. 03通过 Redis 在集群间发送事件
  4. 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