1、问题背景
目前,我正在进行我的最终年项目,计划用 Python 编写一个云计算系统,而云客户端将由我的团队成员使用 Java 来编写。这个云客户端将具有一个带有标签的界面,并提供文本编辑器、媒体播放器、几个基于 Java 的小游戏以及其他一些服务。
服务器将按照以下步骤工作:
- 验证用户。
- 将一个名为 “dump” 的文件发送给用户。这个 “dump” 文件将包含用户自己创建的所有文件的文件名和文件类型,以及用户可以读/写的文件。这些信息将从数据库中获取。
- 客户端中的标签将显示与标签应用程序相关联的文件类型。例如,媒体标签将只选择和显示用户可读的 “dump” 中的媒体文件。文本编辑器标签将只显示用户可读的 “dump” 中的 txt 文件。
- 打开文件的请求将被发送回客户端,相关的应用程序将打开该文件。
- 对文件所做的所有更改和所有操作(覆盖、保存、删除等)以及新对象将被连同新对象一起发送回服务器。对新创建的对象也会进行类似的操作。
我的问题是:
- 客户端和服务器之间通信的最佳方法是什么?对于 “dump” 文件,我计划使用某种加密的 XML 文件。对于其他方式,我还没有头绪。
- 为了便于与数据库集成,我计划使用 Django(几天前我就开始了)。我该如何将请求从客户端发送到服务器(不使用 Django,我将使用 SQL 查询)以及将文件从服务器发送到客户端?也许 GET 和 POST 可以解决第一个问题?还有其他建议吗?
2、解决方案
2.1、客户端与服务器之间的数据传输
对于客户端与服务器之间的数据传输,可以使用 HTTPS 来支持加密,并使用 JSON 来序列化 Python 和 Java 语言之间的对象。此外,还可以尝试使用 XML-RPC over SSL 或 TSL。
2.2、向服务器数据库发送查询
为了向服务器数据库发送查询,可以与负责编写服务器的人沟通,了解哪种方法最简单。但是,客户端应该坚持使用 HTTP。服务器开发人员将确保服务器支持 RESTful URI。然后,客户端只需访问 URI,让服务器处理结果。
其最原始的实现方式如下:
https://www.example.com/db?q="SELECT * FROM docs"
还有一些更智能的方法可以实现,但这是基本思路。
2.3、代码示例
# 服务器端代码from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt@csrf_exempt
def db_query(request):query = request.GET.get('q')results = query_database(query)return HttpResponse(json.dumps(results))# 客户端端代码import requestsdef send_query(query):url = 'https://www.example.com/db'params = {'q': query}response = requests.get(url, params=params)return response.json()
2.4、其他建议
- 使用云计算服务,如 Google App Engine 或 Amazon Web Services 来托管应用程序。这将使应用程序更易于扩展并提高应用程序的可靠性。
- 使用版本控制系统,如 Git 或 Mercurial 来管理代码。这将使团队成员更容易协作并跟踪项目的更改。
- 使用自动化测试框架,如 pytest 或 unittest 来测试应用程序。这将有助于确保应用程序在生产中运行正常。