C# 什么是';。Bind()';较低级别上的XSockets

C# 什么是';。Bind()';较低级别上的XSockets,c#,python,websocket,xsockets.net,C#,Python,Websocket,Xsockets.net,我有以下使用库的C#代码: 现在,我正尝试使用以下包将此代码移植到Python 2.7: 我的问题是WebSocket包没有提供这样的“.Bind()”方法。我所拥有的一切都是onmessage,onerror回调。现在我想自己实现这个绑定,但我真的不知道XSockets是如何在内部实现的。它有什么规格吗?XSockets服务器是否通过其他url(如ws://awebsocket.org:4502/Controller/messages或ws://awebsocket.org:4502/Cont

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

现在,我正尝试使用以下包将此代码移植到Python 2.7:


我的问题是WebSocket包没有提供这样的“.Bind()”方法。我所拥有的一切都是onmessage,onerror回调。现在我想自己实现这个绑定,但我真的不知道XSockets是如何在内部实现的。它有什么规格吗?XSockets服务器是否通过其他url(如ws://awebsocket.org:4502/Controller/messages或ws://awebsocket.org:4502/Controller?messages)发送此消息?

在XSockets 3.*框架支持发布/订阅,这意味着客户端订阅主题,然后在发布主题时获取消息

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

当然,它比XSockets中的要多得多,因为您也可以选择只发送给订阅者的子集,例如

this.SendTo(p => p.Age > 18 && p.Age < 25 && p.Location == "UK", "Hello young people in UK", "topicOfChoice");
这一信息基本上意味着:

资料

控制器

"C":"Chat"
方法/主题

"T":"chatmessage"
因此,这些消息实际上是说,将{text:'Hello World'}发送到控制器Chat和方法ChatMessage(可能是一些错误,从我的头上写)

控制器聊天可能看起来像这样

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

this.PublishToAll(text,"chatmessage");
现在,只有订阅了主题“chatmessage”的客户端才能获得数据

然后,您当然可以使用

PublishTo<T>(Func<T,bool> exp, object o, string topic)
PublishTo(函数表达式、对象o、字符串主题)
或者

InvokeTo<T>(Func<T,bool> exp, object o, string topic)
InvokeTo(函数表达式、对象o、字符串主题)

苏。。。如果你想编写一个客户端,我建议你联系XSockets,获取发布/订阅等的所有信息。

最好的方法可能是安装NuGet包“XSockets.JsApi”,看看“XSockets.latest.js”Javascript中的“XSocket.WebSocket”类在做什么。好的,听起来不错,我将看一看像XSockets这样的书,它只是基于WebSocket('window.WebSocket')并添加了这个绑定功能。理论上,我会通过“onmessage”回调接收所有消息,不是吗?一些XSockets大师能验证我的论点吗?谢谢你的详细回答。还有一个问题:用一个简单的websocket库“监听”XSocket是不可能的?据我所知,这是不可能的,不是吗?当然。如果在XSockets中使用RPC,只需发送mesage,它就会到达连接的客户端。如果使用PUB/SUB,您必须在收到任何消息之前订阅某个主题。但首先,您必须连接(握手),然后告诉服务器您正在通过哪个控制器进行通信。请参见此处的4.0 alpha文档
this.PublishToAll(text,"chatmessage");
PublishTo<T>(Func<T,bool> exp, object o, string topic)
InvokeTo<T>(Func<T,bool> exp, object o, string topic)