我正在建立一个自助餐厅管理系统,其中有两种类型的用户; customres&柜台所有者。
对于自助餐厅提供的每道菜,都有与之相关的独特菜肴。
直到现在,我还有像学生一样发送一个POST请求,其中包含了dish,id和counter number到一个更新“orders table”(其中PK为id)的URL。当菜肴准备好后,柜台所有者按“Prepeared”按钮。
此时,我希望订单紧挨着准备好的客户收到“您的订单准备工作正在进行中”。
我该怎么办? 一种方法是简单地创建一个视图,其参数为customer.id&状态,它回复True或Flase。如果我收到True,我可以简单地轮询URL并提供通知。
但是,我觉得轮询不是一个更好的方法,因为会有这么多客户登录,每个人都会轮询到不可加入的服务器。 有更好的方法吗?
答案 0 :(得分:2)
这真的取决于你真正需要的东西。
如果通知可以作为用户活动的一部分发送,只需添加用户消息,只要用户在页面上执行操作,就会显示该消息。 django.contrib.messages加上主html模板中的几行就可以了。
但是如果您希望通知是互动的 - 您可以使用few PUSH options
之一有趣的链接:
从服务器端,可用的选项很少,最简单的是Green Unicorn。使用它将允许您通过少量进程打开和管理数千个连接。
答案 1 :(得分:1)
我不知道你是否理解正确,但我认为你应该使用websockets
http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/
答案 2 :(得分:0)
没有重复轮询的“推送”的最简单方法是“long polling”,其中客户端启动请求并在可用时立即获得答案。无论如何你必须使用一个良好的缩放服务器,但它不会受到至少一直受到重创。
有更好但更复杂的服务器推送方式,请查看我上面链接的文章。
答案 3 :(得分:0)
有两种可能的方法......
覆盖您的相关型号admin.py 保存方法,例如it described in here
您可以使用信号as it described in here
使用admin.save_model更容易,更符合您的需求。由于您有table_id,因此您可以将表的订单状态设置为“准备”。
答案 4 :(得分:-1)
由于我们无法通过http推送数据,我认为轮询是唯一的选择。
您可以使用ajax请求进行轮询,这可以用来更新其他一些统计信息(如果有的话)以使其更具交互性:)