我有一个通过互联网(完全独立的网络)连接的 web 应用程序(django/node.js)和一个客户端(不是浏览器,一个使用请求包的控制台应用程序)。预计客户端不会一直处于活动状态,而是会通过不可靠的 Internet 连接连接到 Internet。
我需要一些关于构建应用程序的建议,系统应该执行以下操作:
我需要能够将数据从服务器推送到客户端,当这种情况发生时,客户端将根据接收到的数据更新其本地 MSSQL 数据库,并向服务器确认数据更新成功(即双向通信)
服务器还可以询问客户端是否处于活动状态......如果客户端处于活动状态,则客户端将响应,这被用作监控客户端状态的心跳。如果它还活着,服务器可以要求客户端启动一个漫长的过程(例如,开始备份其数据库并上传)。如果客户端没有响应,则存在某种超时,并且将发送一封电子邮件,说明服务器无法到达客户端。
以下是一些限制条件:
我已经尝试将服务器端事件推送到客户端,然后客户端发布到 url 其响应。第一个问题是,客户端会消耗处理器上的周期,只是等待一个事件(即使我尝试使用 chrome 或 firefox 之类的浏览器,也会出现同样的问题 - 在等待时,处理器使用率上升了 8% 左右或者)。另一个问题是从服务器启动 ARE_YOU_ALIVE 的代码将停止,客户端将发布到不同的位置/视图,我必须获取该信息。似乎一场灾难即将发生。所以这种方法被放弃了。
我真的不想使用龙卷风,扭曲等。现在真的不想在这方面投入时间。我的大多数应用程序都运行良好,并且不想为这个小功能重新发明轮子。
我确信正确的方法涉及 node.js 和 socketio,并希望使用它们。同时,我不是 JS 忍者,我想让 django 做繁重的工作。我喜欢这篇文章解决问题的方式,并且使用最少的 node.js,并让 django 处理逻辑。但是,问题似乎是
node_api(request)
(客户端将发布其响应的位置)将不知道客户端正在响应哪个 ARE_YOU_ALIVE 请求。我真的需要一些简单的东西,比如:
人们通常如何处理这种情况是否有已知的模式?我觉得我正在做一些新的事情,但没有遇到任何关于如何完成的文档。我将不胜感激任何指导。client_alive = Get_client_status(client) if client_alive: send_command_to_client(command['INIT_BACKUP'] response = Get_client_status(client)
block until response.state == "BACKUP_COMPLETE": response = Get_client_status(client) # need to handle timeout if backup is stuck and will not complete for some reason
else: timeout? send_email_client_dead()