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

How to send a message to a specific client using WampSharp?

假设我有 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();

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

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