什么' .Bind()'在较低级别的XSockets

时间:2014-06-10 10:53:02

标签: c# python websocket xsockets.net

我使用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>?

1 个答案:

答案 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或rpc
PublishTo<T>(Func<T,bool> exp, object o, string topic)

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

Soo ...如果您想编写一个客户端,我建议您联系XSockets以获取有关发送/订阅等发送内容的所有信息......