0

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

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

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

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

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

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

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

谢谢您的答复。

4

1 回答 1

0

Google App Engine 不支持持久连接。

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

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

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

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

您可以在 SO 上找到有关会话的更多信息:如何在 Google 应用引擎上使用会话

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

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

于 2013-01-15T17:07:11.483 回答