【问题标题】:Implementing a protocol exchanging four messages within a single persistent connection实现在单个持久连接中交换四个消息的协议
【发布时间】:2013-01-14 17:35:36
【问题描述】:

我有一个完整的协议实现,其中使用通过 Java 套接字的持久连接以下列方式在客户端(本机 Android 应用程序)和服务器(独立 Java 服务器)之间交换四个消息:

(客户端->服务器):message1

(服务器->客户端);消息2

(客户端->服务器):message3

(服务器->客户端):message4

在发送每条消息之间,客户端和服务器都必须执行繁重的数学(加密)运算(椭圆曲线上基于配对的计算)。

这个项目在我的本地开发机器上使用套接字正常工作,并且在 Android 应用程序和 Java 服务器之间维护从 message1 到 message4 的打开这个套接字。现在,我需要对 Google AppEngine 做同样的事情,但由于它不允许打开套接字,我不知道该怎么做。我已经检查了 Channel 和 XMPP API,但我不知道我的用例是否适用于这些 API。使用 AppEngine 的 Channel 和 XMPP API 的方法是否正确?是否可以通过 AppEngine 上的套接字模拟在我的本地机器中实现的功能?

感谢您的回复。

【问题讨论】:

  • 你能补充一些关于你的要求的细节吗?没有要求就很难提出任何建议。如果您的客户端可以处理 JavaScript,那么 Channel API 可能会为您工作。
  • 我的客户端应用程序是原生 Android 应用程序。协议在发送 message1 和 message3 之前需要进行大量的数学计算。因此,我不知道处理 JavaScript 是否有用。我刚刚修改了我最初的问题。谢谢

标签: java google-app-engine sockets persistent-connection


【解决方案1】:

Google App Engine 不支持持久连接。

您将需要重新设计您的协议以在 HTTP 上运行。

例如,message1 可以通过 HTTP 请求发送,message2 可以与匹配的 HTTP 响应一起返回。此时,您的套接字连接结束。

您必须发出第二个 HTTP 请求才能使用 message3 打开一个新套接字,并且您可以使用第二个 HTTP 响应返回 message4。

您可以使用 HTTP 会话“连接”第一个和第二个 HTTP 请求。会话基本上是一个 id,在服务器端存储了额外的数据。您将在第一个 HTTP 请求中创建会话,并将其作为参数传递给第二个 HTTP 请求。服务器在处理第二个请求时可以查找会话 id 和相关数据。

您可以在 SO 上找到有关会话的更多信息:How to use session on Google app engine

XMPP API 对您没有帮助,它用于在 GAE 服务器端代码和其他使用 HTTP 作为通信协议的 XMPP 客户端之间进行通信。

Channel API 可用于从服务器->客户端发送数据,但它实际上是作为 HTTP 长轮询实现的。使用了多个长 HTTP 请求,并且不能保证您有一个保持打开的套接字;在此过程中打开和关闭多个套接字。它会比我上面描述的更复杂,也更昂贵。

【讨论】:

  • 根据您的回答,我必须处理 HTTP 会话。感谢您的宝贵时间和回复,这对我很有帮助。
猜你喜欢
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 2019-01-29
相关资源
最近更新 更多