What does '.Bind()' of XSockets on lower level

本文关键字:XSockets on lower level of does Bind What | 更新日期: 2023-09-27 18:08:00

我有以下使用XSockets库的c#代码:

var client = new XSocketClient("ws://awebsocket.org:4502/Controller", "*");
client.Bind("commands", e => { ... });

现在我正在尝试将此代码移植到Python 2.7与WebSocket包:

ws = WebSocketApp("ws://awebsocket.org:4502/Controller")

我的问题是,WebSocket包不提供这样的"。bind()"方法。我所有的都是onmessage-, onerror-回调。现在我想自己实现这个绑定,但我不知道XSockets是如何在内部实现的。它有什么规格说明吗?XSockets-Server是否通过另一个url发送此消息,如ws://awebsocket.org:4502/Controller/messagesws://awebsocket.org:4502/Controller?messages ?

What does '.Bind()' of XSockets on lower level

框架支持发布/订阅,这意味着客户端订阅主题,然后在主题上有发布时获取消息。

所以你关于所有消息被发送到所有客户端的假设是错误的。将所有消息发送到所有客户机,并让客户机API过滤掉不想要的消息,这将是一个非常糟糕的解决方案。因此,服务器实际上跟踪客户端订阅。

当然,在XSockets中还有更多的功能,因为你也可以选择只发送给订阅者的子集,例如
this.SendTo(p => p.Age > 18 && p.Age < 25 && p.Location == "UK", "Hello young people in UK", "topicOfChoice");

如果你想构建自己的客户端,XSockets团队一定会帮助你。实际上,你只需要获取有关发送"订阅"、"退订"等内容的信息。所有消息都遵循一个协议,XSockets使用该协议来知道在哪里调度它们以及做什么。

我强烈建议为4.0编写客户端,因为4.0 vs 3有非常大的变化。

在4.0中,消息看起来像这样

{"D":"{'"text'":'"Hello World'"}","C":"Chat","T":"chatmessage"}

这个信息的意思是:

数据
"D":"{'"text'":'"Hello World'"}"
控制器

"C":"Chat"

方法/话题

"T":"chatmessage"

所以消息实际上是说,发送{text:'Hello World'}到控制器Chat和方法ChatMessage(可能是一些错误,从我的头脑中写出来的)

控制器对话框看起来像这样

public class Chat : XSocketController
{
    public void ChatMessage(string text)
    {
        this.InvokeToAll(text,"chatmessage");
    }
} 
上面的示例使用RPC,这意味着连接到该控制器的所有客户机都将获得消息。如果需要发布/订阅,只需替换
this.PublishToAll(text,"chatmessage");

现在只有订阅了主题"chatmessage"的客户端才能获得数据

那么你当然可以使用

更好地pub/sub或rpc
PublishTo<T>(Func<T,bool> exp, object o, string topic)

InvokeTo<T>(Func<T,bool> exp, object o, string topic)

秀……如果你想写一个客户端,我建议你联系XSockets,获取关于发送什么来做发布/订阅等的所有信息。