让两台服务器互相交谈
问题描述:
我有应用程序写在GWT和谷歌的AppEngine/Java的托管。在这个应用程序中,用户可以选择将视频/音频/文本文件上传到服务器。这些文件可能很大,最高可达1GB左右,因为GAE/J不支持大文件,我必须使用另一台服务器来存储这些文件。如果浏览器中没有跨域安全功能,这将很容易实现。所以,我在想的是让GAE服务器与我的服务器(Glassfish或任何其他Java服务器,如果需要的话)通话以告诉文件的URL,并且如果可能的话发送上传文件的状态(上传多少%),这样我就可以在客户端屏幕上显示状态。这是我想要做的。让两台服务器互相交谈
当用户负载GWT页面上存储的GAE/J,他/她将文件上传到我的服务器,然后我的服务器将发送响应返回给GAE和GAE将发送响应到客户端。 如果这种情况是可能的,那么实施GAE到Glassfish对话的最佳方式是什么?
答
其实在此之前,也许你可以尝试使用第一种方法通过绕过使用iframe的浏览器的跨域安全。有一些准备好使用这个组件,但对于你的问题,哪些是可用的,我不知道。只是谷歌的这些组件...
答
做到这一点,你建议使用的原始方式URL Fetch Service 这样做的另一种方式的缺点是,你在网页内的多个网站引入依赖。
使用网址提取服务的缺点是,您必须按达到免费配额后转移的字节数支付费用。
答
一种选择是等待 - Blob存储区进行限制不会永远是50MB!
如果你赶时间,不过,我建议像下面的方法:
- 让你的App Engine应用程序生成签名令牌表示用户有权上传文件。令牌应该包括当前的日期和时间,用户的用户ID,最大文件大小以及任何其他相关信息,并且应该使用HMAC-SHA1使用您的App Engine应用程序和您的服务器都知道的密钥进行签名。
- 返回的形式登载有对你的blob的URL托管服务器,并嵌入你在步骤1.如果要进度通知生成的标记,你可以使用一个工具,如plupload和服务形式的用户IFrame由您的上传服务器提供服务。
- 当用户将文件上传到您的服务器时,服务器应该将重定向返回到您的App Engine应用程序,并在重定向URL中嵌入一个新的令牌。该令牌再次用公共密码签名,包含新上传文件的ID。
- 当你的App Engine应用程序接收对重定向URL的请求时,它知道上传完成,并且可以在数据存储记录新文件的ID等。
或者,您可以使用Amazon's S3,它已经支持所有这些与它的HTML Form support。