Java(或PHP)中的Websockets服务器

3
我需要您的经验来实现当前HTML5中不断发展的Websockets,我们希望在客户端使用常见的web浏览器来使用此技术进行项目。现在我们需要一个web服务器来满足我们的要求,这些要求是:
  • 必须使用Java或PHP编写,因为这些是项目中所有程序员正在使用和掌握的语言。由于似乎没有很有前途的PHP实现,我倾向于专注于Java领域。
  • 尽可能快速。我们不期望在生产中使用过多,但我们需要能够在几乎实时的情况下同步两个独立主机上的浏览器。
  • 易于扩展。我们将需要在Websockets之上实现自己的协议,因此希望具有最大的灵活性。
  • 易于使用,文档齐全且正在积极开发。由于我们必须尽快达到第一个运行实现,并且由于我预计在此期间会有一些人员变动,因此如果不难进入服务器编程,则会非常好。

我已经查看了一些看起来很有前途的服务器/框架,例如Jetty、Netty和jWebSocket。我还发现了一些关于此主题的较旧讨论。然而,如果您已经使用Java(或PHP)与Websockets一起工作,并拥有当前的经验或建议,那么我会很高兴听到。

编辑:为了清楚起见:当我谈论在Websockets之上实现自己的协议时,我的意思是具有某种插件机制,以便我们可以使用Websocket将XML消息发送到服务器,然后使用插件将其解释为我们喜欢的一些服务器操作。我想每个服务器实现也都支持这一点,但编写此类插件不应太困难。

1个回答

1

我对PHP没有任何经验,所以我会给你我的Java(和Python)方面的意见。

对于Java:

你有一个非常常见且安全的选择:Tomcat。它是最活跃开发的服务器之一,是开源的,有来自其庞大社区的大量支持/帮助,从我所读到的(但未经过测试),它可以相当可扩展,并且还具有用于监视网站不同指标的非常成熟的控制台。

你还有其他选择,例如Caucho的Resin,他们有一个非常小但聪明的团队积极开发他们的Web服务器。他们的新心跳服务允许很好的可扩展性(再次根据我所读到的)。

然后你还有Google的App Engine,它专注于可扩展性。他们的API(服务器和客户端)已经开始专注于实时Web应用程序,因此创建高性能Web应用程序变得更加容易,无需担心通常需要对其他服务器进行的服务器相关优化。他们有用于在服务器和客户端之间创建“通道”的API,用于处理实时应用程序。App Engine团队还推出了新的MapReduce API,用于快速/高效地分析数据。基于这些原因以及个人意见认为他们是开创新的Web技术/标准,我个人倾向于使用App Engine。如果您保持CPU /数据使用率较低,它是免费的,但是如果您需要全面部署,则价格可能会昂贵,因此请进行研究。如果您的项目更多是为了娱乐/学校,其免费配额足够,并且所有开发工具/API都是免费的,因此非常适合。
对于Python:

我更擅长Java而不是Python,但Python绝对是一门很棒的语言,非常非常容易学习。我之所以推荐在这里考虑Python,是因为AppEngine也允许开发者选择Python。Python语言的作者/创造者现在也在AppEngine团队中,因此尽管Python和Java API基本上完全相同,但它们有时会为Python提供新的/更好的API。例如,我认为Python提供的数据存储API更加简单,并且针对Google数据存储进行了优化。此外,由于您将使用Python,因此可以在AppEngine中使用Django。

我最近了解到的第二个选择是Tornado Web服务器,它是由FriendFeed开发,然后被Facebook购买和使用。它也在积极开发中。但我提出这个问题的原因是,Tornado的重点与AppEngine类似,都是高性能和可扩展的Web应用程序。我没有使用过它,但我对其技术感兴趣,因为没有人可以否认Facebook需要一个非常高性能/可扩展的Web服务器。

最后几点想法:

一般来说,你会发现在大多数Web服务器(甚至是Asp.NET MVC)提供的API之上构建自己的协议并不是很困难。但是从我所能够测试的AppEngine来看,它真正专注于对其上面构建的协议类型的灵活性。对我而言,它几乎就像是一个基于HTTP工作的RPC服务器。如果你使用Python,这一点就更加明显了,因为有些语言结构使得这一点变得更加明显。

感谢您的回答。Google的AppEngine确实看起来很有前途,但我担心它不支持Websockets。另外,我们已经有一个现有的服务器基础架构(使用Tomcat,但它也不幸地不支持Websockets),将用于该项目。 - j0ker
是的,没错。AppEngine已经承认了这个问题,并且可以使用TyphoonAE来解决。现在,AppEngine有一个类似用例的Channel API,谷歌自己也用它来处理Google Docs和GChat之类的事情。但我相信AppEngine很快也会发布Web Sockets API。 - Nadir Muzaffar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接