我有一个webapp(django / node.js)和一个通过互联网连接的客户端(不是浏览器,使用请求包的控制台应用程序)(完全独立的网络)。预计客户端不会永远存在,将通过不可靠的互联网连接连接到互联网。
我需要一些关于构建应用程序的建议,系统应该执行以下操作:
我需要能够从服务器将数据推送到客户端,当发生这种情况时,客户端将根据收到的数据更新其本地MSSQL数据库,并向服务器确认数据更新是成功的(即双向沟通)
服务器还可以询问客户端是否处于活动状态....如果客户端处于活动状态,客户端将响应,并将其用作监视状态客户端的心跳。如果它处于活动状态,则服务器可以要求客户端启动一个长进程(例如,开始备份其数据库并上传)。如果客户端没有响应,则会出现一种超时,并且会发送一封电子邮件,说服务器无法访问客户端。
以下是一些限制因素:
我已尝试将服务器端事件推送到客户端,并且客户端发布了url其响应。第一个问题是,客户端会在处理器上消耗周期而只是为了一个事件(同样的问题,即使我尝试使用像chrome或firefox这样的浏览器 - 当它等待时,处理器使用率的百分比上升到8%左右或者)。另一个问题是从服务器踢出ARE_YOU_ALIVE的代码将停止,客户端将发布到不同的位置/视图,我必须获取该信息。看起来像是等待发生的灾难。所以这种做法被放弃了。
我真的不想使用龙卷风,扭曲等。真的不想在此为此投入时间。我的大部分应用都运行良好,并且不想为这个小功能重新发明轮子。
我确信正确的方法涉及node.js和socketio,并且想要使用它们。与此同时,我不是JS忍者,而且想让django做重任。我喜欢this article solves the problem,并且有最小的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()
关于人们通常如何处理这种情况,是否存在已知模式?我觉得我正在做一些新的事情,但是没有遇到任何关于如何做到这一点的文档。我将不胜感激任何指导。
答案 0 :(得分:0)
我建议在这里考虑几个选项,如果坚持使用HTTP。