现在我喜欢的所有浏览器都几乎完全支持服务器发送事件,我想尝试在一个我一直推迟的网站上实现它,因为我讨厌轮询。但我有最初的犹豫,我希望我能得到一些帮助。
这是我的用例:
用户进入一个基于时间和竞争的表格,在这种情况下是班级注册。在所有条件相同的情况下,他们有一个大约 30 - 40 个他们有资格参加的课程的列表,并且为了最大限度地减少“她先登录但他先点击保存但他不是故意点击保存但她已经选择了”的实例另一个类”等,我想实时制作表单,这样当有人选择一个选项时,它会直接进入数据库,其他任何查看表单的人都会看到它正在填满。(稍后我会处理人们改变主意的压力)。
因此,在轮询场景中,我不得不处理 AJAX 调用,必须检查 40 个点的状态并更新它们,并设置一个可能仍会产生冲突的间隔。
但是使用服务器发送事件,我可以让侦听器只获取需要更新的点,这似乎更好,但这是我卡住的地方:
听众是否有过载的风险?假设脚本连续发送 15 条关于状态更改的消息。我看到有关用户代理应如何处理排队任务的模糊提及,但不清楚这是用于建立连接还是处理服务器发送的消息
这基本上只是将轮询的负担从浏览器传递到服务器吗?脚本是否必须每秒检查一次数据库的更改?有什么方法可以让脚本在发生更改时知道或通知?让我们假设座位请求是
requests.php
通过 ajax发送的,updates.php
并将事件推送回浏览器。有没有一种标准和/或聪明的方法可以让你在提交updates
之前闲置?requests
我能想到的唯一解决方案是requests.php
将提交的更改写入一个平面文件(commits.xml
也许),并且updates.php
每半秒轮询一次文件大小,从而将工作量保持在最低限度。
那里有更好/更智能/更明显的解决方案吗?