2010-09-07 69 views
4

我需要维护服务器和多个客户端之间的连接,以便客户端可以发送命令,并且服务器触发事件​​。服务器基本上是一个音乐播放器,并且客户端发送诸如“Play()”,“Pause()”,“GetPlaylists()”等命令。其一侧的服务器需要能够告诉客户端诸如“SongEnded”或“PlayerPaused”。此外,它还需要能够发送一些数据(如当前歌曲,专辑图像,播放列表等)。我可以自己去创建一个套接字,并创建自己的协议来处理上述所有情况,但有可能有人已经在我之前完成了这个任务,所以我真正想要的是一个为实时应用程序开发的框架, .NET服务器和客户端之间的通信。例如,我看过xml-rpc,但不知道该如何处理“OnClientSend”。另外,如果我没有弄错,xml-rpc会变得像REST一样。我也研究过wcf,但由于我没有经验,我不知道从哪里开始,以及如何在简单的控制台应用程序中托管服务器。.NET双向套接字实时通信协议l

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

任何想法的解决方案,将不胜感激。另外,如果你有一个好的框架的链接,或者说明如何使用.NET中已经存在的组件,我会很开心。

[编辑] 的问题是,通过套接字发送数据时也不能保证(在所有!),您发送的包将被服务器在同一时间读取。我可能会再发送50,然后是100,然后再发送50个字节,但服务器可能会将其读为200byte的块,或者前100或100等,这意味着我需要创建一个缓冲区,读取消息,直到我确定是问题),我收到了一条消息(没有其他)。

回答

0

我最终创建了自己的简单协议,我可以轻松地在多种语言中实现。我通过在套接字的两边添加一层额外的缓冲区,然后发送每条消息,然后发送一个字节序列,告诉另一方这是消息的结束,从而达到了期望的结果。此外,我添加了ID的消息,以启用特殊的“$返回”消息。

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

0

你也可以看看XMPPWebSockets。 XMPP不仅限于消息传递,您可以随时为自己的目的扩展它。因为它是HTML5的一部分,所以WebSockets很好。

2

ZeroMQ看起来很适合您的问题。似乎你已经实现了类似的东西。

  • 充当并发框架的Supersocket库。

  • 通过inproc,IPC,TCP和组播传送消息。

  • 在扇出,pubsub,管道和请求 - 回复模式中连接N对N.

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

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

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

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

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

  • LGPL免费软件,通过iMatix公司的商业支持。

+0

是的,但我需要它在android上运行。 – Alxandr 2010-09-15 12:16:02