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/messages或ws://awebsocket.org:4502/Controller?messages ?
框架支持发布/订阅,这意味着客户端订阅主题,然后在主题上有发布时获取消息。
所以你关于所有消息被发送到所有客户端的假设是错误的。将所有消息发送到所有客户机,并让客户机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或rpcPublishTo<T>(Func<T,bool> exp, object o, string topic)
或
InvokeTo<T>(Func<T,bool> exp, object o, string topic)
秀……如果你想写一个客户端,我建议你联系XSockets,获取关于发送什么来做发布/订阅等的所有信息。