我使用XSockets库获得以下C#代码:
var client = new XSocketClient("ws://awebsocket.org:4502/Controller", "*");
client.Bind("commands", e => { ... });
现在我尝试使用WebSocket包将此代码移植到Python 2.7:
ws = WebSocketApp("ws://awebsocket.org:4502/Controller")
我的问题是,WebSocket包没有提供这样的&#34; .Bind()&#34;方法。我所拥有的一切都是消息,错误回调。现在我想自己实现这个绑定,但我真的不知道,XSockets是如何在内部实现的。有没有关于它的规格? XSockets-Server是否通过 ws://awebsocket.org:4502 / Controller / messages 或 ws://awebsocket.org:4502 / Controller?messages < / em>?
答案 0 :(得分:1)
在XSockets 3. *框架支持pub / sub,这意味着客户端订阅主题,然后在有关该主题的发布时获取消息。
因此,您对所有发送给所有客户端的消息的假设是错误的。将所有消息发送到所有客户端并让客户端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和3之间有很大的变化。*
在4.0中,消息可能如下所示
{"D":"{\"text\":\"Hello World\"}","C":"Chat","T":"chatmessage"}
该消息基本上意味着:
DATA
"D":"{\"text\":\"Hello World\"}"
CONTROLLER
"C":"Chat"
METHOD / TOPIC
"T":"chatmessage"
所以消息真的说,发送{text:'Hello World'}到控制器聊天和方法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)
Soo ...如果您想编写一个客户端,我建议您联系XSockets以获取有关发送/订阅等发送内容的所有信息......