让两台服务器相互通信

时间:2009-07-19 21:30:07

标签: java google-app-engine client-server cross-domain

我的应用程序是用GWT编写的,并托管在Google AppEngine / Java上。在此应用程序中,用户可以选择将视频/音频/文本文件上载到服务器。这些文件可能很大,高达1GB左右,因为GAE / J不支持大文件,我必须使用另一台服务器来存储这些文件。如果浏览器中没有跨域安全功能,这将很容易实现。所以,我在想的是让GAE服务器与我的服务器(Glassfish或任何其他java服务器,如果需要)通话,告诉url文件,如果可能的话,发送上传文件的状态(上传了多少百分比),这样我就可以在客户端屏幕上显示状态。这是我正在考虑的事情。

当用户加载存储在GAE / J上的GWT页面时,他/她将文件上传到我的服务器,然后我的服务器将响应发送回GAE,GAE将向客户端发送响应。 如果这种情况可能,那么实施GAE到Glassfish对话的最佳方式是什么?

3 个答案:

答案 0 :(得分:1)

实际上在此之前,您可以尝试使用第一种方法,通过使用iframe绕过浏览器的跨域安全性。有一些准备使用组件,但对于你的问题,哪些是可用的,我不知道。只需谷歌搜索这些组件......

答案 1 :(得分:0)

按照您建议的原始方式URL Fetch Service进行操作 这样做的另一方面是你在网页内的多个网站上引入了依赖关系 使用URL提取服务的缺点是,您必须按照达到免费配额后转移的字节数进行支付。

答案 2 :(得分:0)

一种选择是等待 - blobstore限制不会总是50MB!

如果你赶时间,我会建议采用以下方法:

  1. 让您的App Engine应用生成一个签名令牌,表示用户有权上传文件。令牌应包括当前日期和时间,用户的用户ID,最大文件大小以及任何其他相关信息,并且应使用HMAC-SHA1使用您的App Engine应用程序和服务器都知道的密钥进行签名。 / LI>
  2. 将表单发送给发布到blob托管服务器上的URL的用户,并嵌入您在步骤1中生成的令牌。如果您需要进度通知,则可以使用plupload之类的工具,并提供服务您上传服务器提供的IFrame中的表单。
  3. 当用户将文件上传到您的服务器时,服务器应该将重定向返回到App Engine应用程序,并在重定向URL中嵌入新的令牌。该令牌再次使用共同密钥签名,包含新上传文件的ID。
  4. 当您的App Engine应用程序收到重定向URL请求时,它知道上传已完成,并且可以在数据存储区中记录新文件的ID等。
  5. 或者,您可以使用Amazon's S3HTML Form support已使用{{3}}支持所有这些内容。