如何使用 WampSharp 向特定客户端发送消息

本文关键字:客户端 消息 何使用 WampSharp | 更新日期: 2023-09-27 18:36:39

假设我有 3 个客户端:客户端 A、客户端 B 和客户端 C。

它们都支持 Ping() 函数,它们使用反射(基于 WampSharp 文档的代码)注册该函数:

public interface IArgumentsService
{
   [WampProcedure("com.arguments.ping")]
   void Ping();
}
public class ArgumentsService : IArgumentsService
{
   public void Ping()
   {
   }
}
IArgumentsService services = channel.RealmProxy.Services;
ArgumentService callee = new ArgumentService(this);
services.RegisterCallee(callee);

接下来,我在每个客户端上设置一个代理来进行出站呼叫:

DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory();
IWampChannel channel = channelFactory.CreateJsonChannel("ws://127.0.0.1:8080/", "realm1");
Task channelOpenTask = channel.Open();
channelOpenTask.Wait();
IArgumentsService proxy = channel.RealmProxy.Services.GetCalleeProxy<IArgumentsService>();

如何将消息从客户端 A 发送到客户端 C? 通过代理向路由器发送消息时,我没有看到寻址特定客户端的方法? 我所能做的就是:

proxy.Ping();

我猜这会向所有客户端广播消息? 如何仅指定单个客户端? 是否支持该使用场景?

如何使用 WampSharp 向特定客户端发送消息

根据 WAMP 基本配置文件规范,不可能在每个路由器的领域多次注册相同的过程。以下代码将导致注册 (wamp.error.procedure_already_exists) 时出现异常。为了实现您想要的功能,请考虑为每个客户端注册不同的过程 uri。这可以使用ICalleeRegistrationInterceptor来实现。