java - Java(或 PHP)中的 Websockets 服务器

标签 java php websocket

我可能需要您根据 HTML5 中当前不断发展的 Websockets 的服务器实现经验。我们希望将此技术用于在客户站点上使用通用网络浏览器的项目。我们现在需要的是一个满足我们需求的网络服务器。它们是:

  • 用 Java 或 PHP 编写,因为这些是项目中所有程序员当前使用和掌握的语言。由于似乎还没有有前途的 PHP 实现,我倾向于专注于 Java 站点。
  • 尽可能快。我们不希望在生产中使用太多,但我们需要能够近乎实时地同步独立主机上的两个浏览器。
  • 易于扩展。我们需要在 websockets 之上实现我们自己的协议(protocol),因此我们希望获得最大的灵 active 。
  • 易于使用、文档齐全且开发积极。由于我们必须相当快地完成第一个运行的实现,并且我预计开发人员在此期间会发生一些变化,所以如果不难进入服务器编程,那就太好了。

我已经看过一些看起来很有前途的服务器/框架,例如 jetty 、Netty 和 jWebSocket。我还发现了一些关于该主题的旧讨论。但是,对于那些已经使用 Java(或 PHP)来处理 Websockets 的人,我很高兴能得到一些当前的经验或建议。是否有一些特别适合或我们绝对不应该使用的实现?

编辑: 为清楚起见:当我谈到在 Websockets 之上实现我们自己的协议(protocol)时,我的意思是拥有某种插件机制,以便我们可以使用 Websocket 将 XML 消息发送到服务器,然后使用插件将它们解释为一些服务器操作如我们所愿。我想每个服务器实现也都支持这个,但如果编写这样的插件不是太困难,那就太好了。

最佳答案

我没有任何使用 PHP 的经验,所以我会告诉您我对 Java(和 Python)方面的看法。

对于 Java:

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

您还有其他选择,例如 Caucho's Resin,他们有一个非常小但很聪明的团队,他们积极开发他们的网络服务器。他们的新心跳服务允许很好的可扩展性(同样来 self 读过的内容)。

然后您还有 Google 的应用引擎,它完全是关于可扩展性的。他们的 API(针对服务器端和客户端)已经开始专注于实时 Web 应用程序,因此创建高性能 Web 应用程序更容易一些,而不必担心您经常必须对其他服务器进行的与服务器相关的优化.它们具有用于在服务器端和客户端之间为非常实时的应用程序创建“ channel ”的 API。 AppEngine 团队还有一个新的 MapReduce API,用于快速/高效地分析数据。出于这些原因以及他们正在开创新的网络技术/标准的个人观点,我个人一直倾向于 AppEngine。如果您保持较低的 CPU/数据使用率,它是免费的,但如果您需要全面部署,它确实开始变得昂贵,因此请进行研究。如果你的项目更多的是娱乐/学习,它的免费配额就足够了,它的所有开发工具/API 都是免费的,非常完美。

对于 Python:

我更喜欢 Java 而不是 Python,但 Python 绝对是一种很棒的语言,而且非常非常容易学习。我在这里推荐 Python 的原因是因为 AppEngine 还允许开发人员选择 Python。 Python 语言的作者/创建者现在在 AppEngine 团队中,因此,即使 Python 和 Java API 几乎完全相同,它们有时也会为 Python 提供新的/更好的 API。例如,我认为 Python 提供的数据存储 API 更容易一些,并且针对 Google 数据存储进行了优化。此外,由于您将使用 Python,因此可以将 Django 与 AppEngine 结合使用。

我最近意识到的第二个选择是 tornado 网络服务器,它由 FriendFeed 开发,然后被 Facebook 购买和使用。它也在积极开发中。但我提出这个问题的原因是 Tornado 的重点与 AppEngine 非常相似,是高 Web 应用程序性能和可扩展性。我没有使用它的经验,但我对它的技术产生了兴趣,仅仅是因为没有人可以质疑 Facebook 需要非常高性能/可扩展的网络服务器。

一些最后的想法:

一般来说,您会发现在大多数 Web 服务器(甚至 Asp.NET MVC)提供的 API 之上构建您自己的协议(protocol)并不难。但是从我能够使用 AppEngine 进行的测试来看,它真正关注的是在其之上构建哪种协议(protocol)方面具有灵 active 。对我来说,它几乎就像一个工作在 HTTP 之上的 RPC 服务器。如果您仅仅因为某些语言结构而使用 Python,这一点会变得更加明显。

关于java - Java(或 PHP)中的 Websockets 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8334626/

相关文章:

php MySQL 选择优先级

python - 在带有协议(protocol)升级的 nginx 反向代理后面运行 daphne 总是路由到 http 而不是 websocket

node.js - 带有 SockJS (NodeJS) + STOMP 客户端的 Websockets 服务器

java - 用注解替换SimpleFormController(spring<3到4.3转换)

java - 修复 Double.parseDouble 的结果被忽略的错误消息

php - 将base64编码的dataURI图像插入MySQL BLOB字段

javascript - 将数据从 websocket 发送到 socket.io

java - GXT3 ComboBox 多选

java - JAVA中从sql语句获取表名和查询类型

php - PHP 类中的可见性重要吗?为什么?