在 silverlight 上做 p2p 应用程序的最佳方法是什么

what is the best way to do a p2p app on silverlight

我正在构建一个 silverlight 应用程序,并希望添加 p2p 功能 - 允许用户相互发送数据。

  • 开箱即用吗?
  • 我应该等待silverlight 4.0吗?
  • 我需要一个 p2p 服务器吗?

关键问题实际上是打开客户端套接字以接受来自另一台机器的连接,而 Silverlight 不支持这一点,即使在浏览器外模式下,甚至在 Silverlight 4 中。如果你想做某事像这样,正如其他人提到的那样,您需要一个两个客户端都可以连接到的公共服务器,它将在客户端之间来回代理消息。当然,Silverlight 套接字仅限于端口 4502-4532 这一事实也意味着您在某种程度上受到防火墙策略的限制。

我们对我们的应用程序(使用 Silverlight 4)所做的是尝试连接对 Net.TCP 的新支持(扩展性更好),然后如果失败,则回退到 HttpDuplexBinding(运行HTTP,因此更有可能通过防火墙)。然后我们编写了一个 WCF 服务,它从一个客户端接收消息并将它们提交给其他订阅客户端。它不是 P2P,但它允许类似的结果(除了 P2P 连接的所有实际好处)。

如果您迁移到 WPF,您当然会放弃 Silverlight 的可移植性,但您可以获得完整的服务器套接字支持,以及编写各种 NAT 遍历策略(如 STUN 和 TURN)的能力。


我认为您无法在 Silverlight 的无服务器环境中完成这项工作。

您可以使用服务器和 Web 服务做任何您想做的事情,尽管这在技术上不再是点对点应用程序。您必须将消息发送到服务器,然后服务器将发送到适当的客户端。如果您遵循此路线,您可能还想研究 Silverlight 的 WCF RIA 服务,因为它具有对身份验证等内容的内置支持。

编辑——我不知道这是否是一个选项,但看起来有人想出了一种在 Silverlight 中进行 P2P 的方法。但是,它要求您在 Windows Live Messenger 中运行该应用程序:

http://www.codeplex.com/SilverlightP2P