在ServiceStack中,如何从服务器广播消息

本文关键字:服务器 广播 消息 ServiceStack | 更新日期: 2023-09-27 17:58:30

有没有一个简单的教程展示如何将服务器事件与ServiceStack一起使用?具体来说,我正在寻找一种方法,让服务器生成要广播给所有客户端的消息。

我一直在阅读ServiceStack文档并使用示例Chat应用程序,但这两个源代码的信息都不多。文档中存在漏洞,聊天应用程序过于臃肿,只显示了如何发送由客户端触发的消息,而不是由服务器触发的消息。我不知道如何调整这些代码。

在ServiceStack中,如何从服务器广播消息

服务器事件文档显示了可用于发布服务器事件的不同API:

public interface IServerEvents : IDisposable
{
    // External API's
    void NotifyAll(string selector, object message);
    void NotifyChannel(string channel, string selector, object message);
    void NotifySubscription(string subscriptionId, string selector, object message, string channel = null);
    void NotifyUserId(string userId, string selector, object message, string channel = null);
    void NotifyUserName(string userName, string selector, object message, string channel = null);
    void NotifySession(string sspid, string selector, object message, string channel = null);
    //..
}

因此,您可以使用NotifyAll API向所有订阅者发送消息,例如:

public class MyServices : Service
{
    public IServerEvents ServerEvents { get; set; }
    public object Any(Request request)
    {
        ServerEvents.NotifyAll("cmd.mybroadcast", request);
        ...
    }
}

由于它使用了cmd.*选择器,因此可以在JavaScript客户端中使用进行处理

$(source).handleServerEvents({
    handlers: {
        mybroadcast: function(msg,e) { ... }
    }
});

但是,您很少希望向所有订阅服务器而不是仅向频道中的订阅服务器发送消息。

服务器事件示例

ServiceStack的参考聊天应用程序中的所有JavaScript服务器事件处理程序都是用40行JavaScript捕获的,服务器上只有2个ServiceStack服务,并展示了JavaScript服务器事件中的大部分功能。

如果聊天应用程序不清楚,请查看其他服务器事件示例,例如,实时网络时间旅行者会浏览并解释如何使用服务器事件远程控制正在观看用户应用程序的所有应用程序。