【问题标题】:.NET two-way socket realtime communication protocol.NET 双向套接字实时通信协议
【发布时间】:2010-09-07 18:48:17
【问题描述】:

我需要维护一个服务器和多个客户端之间的连接,以便客户端可以发送命令,服务器触发事件​​。服务器基本上是一个音乐播放器,客户端发送诸如“Play()”、“Pause()”、“GetPlaylists()”等命令。服务器端需要能够告诉客户端诸如“SongEnded”或“PlayerPaused”。此外,还需要可以来回发送一些数据(如当前歌曲、专辑图片、播放列表等)。我当然可以自己创建一个套接字并创建自己的协议来处理上述所有场景,但很可能有人已经在我之前完成了这项工作,所以我真正想要的是一个实时框架—— .NET 的服务器和客户端之间的通信。例如,我查看了 xml-rpc,但不确定我应该如何处理“OnClientSend”。另外,如果我没记错的话,xml-rpc 被制作成类似于 REST 的。我也看过 wcf,但由于我没有使用它的经验,我不知道从哪里开始,以及如何在简单的控制台应用程序中托管服务器。

重要提示:客户端不能是 .NET。
重要提示:这需要能够连接到 java (android)。重要提示:主要平台是 Windows(服务器和客户端)和 Android(客户端)。
重要提示:不进行音频流式传输。但是,需要发送图像。

任何解决方案的想法都将不胜感激。另外,如果你有一个好的框架的链接,或者关于如何使用 .NET 中已经存在的组件的描述,我会非常高兴。

[编辑] 问题是,当通过套接字发送数据时,不能保证(根本!)您发送的包将同时被服务器读取。我可能会再次发送 50、100、50 字节,但服务器可能会将其读取为 200 字节的块,或者先发送 100,然后再发送 100 等,这意味着我需要创建一个缓冲区,读取消息直到我确定(这个是问题)我收到了整条消息(仅此而已)。

【问题讨论】:

    标签: .net sockets communication-protocol


    【解决方案1】:

    ZeroMQ 看起来很适合您的问题。看来你自己也实现了类似的东西。

    • 充当并发框架的 Supersocket 库。

    • 跨进程、IPC、TCP 和多播传送消息。

    • 以扇出、发布订阅、管道和请求-回复模式连接 N 对 N。

    • 对于集群产品和超级计算来说足够快。

    • 用于可扩展多核消息传递应用程序的异步 I/O。

    • 庞大而活跃的开源社区。​​p>

    • 20 多种语言,包括 C、C++、Java、.NET、Python。

    • 大多数操作系统,包括 Linux、Windows、OS X。

    • LGPL 免费软件,由 iMatix Corporation 提供商业支持。

    【讨论】:

    • 是的,但我需要它在 android 上运行。
    【解决方案2】:

    【讨论】:

    • 它是否支持双向通信并仅在控制台内运行?
    • 原来客户端需要是 Net 才能使 wcf 能够使用具有双向通信的套接字。
    【解决方案3】:

    您还可以查看XMPPWebSockets。 XMPP 不仅限于消息传递,您始终可以根据自己的目的对其进行扩展。 WebSockets 发展良好,因为它是 HTML5 的一部分。

    【讨论】:

      【解决方案4】:

      我最终创建了自己的简单协议,我可以轻松地用多种语言实现该协议。我通过在套接字的两侧添加额外的缓冲区层来实现想要的结果,然后发送每个消息,然后发送一个字节序列,告诉对方这是消息的结尾。我还在消息中添加了 id 以启用特殊的“$Return”消息。

      消息只是使用 xmlserializer 序列化的类。类是从 xsd 生成的。

      【讨论】: