如何向其他用户显示“用户正在输入...”?

Ian*_*Ian 2 javascript sql jquery chat typing

我正在开发一个消息系统,我想在用户打字或不打字时显示。我想我会如何做到这一点,只是在我的数据库中有一个名为“打字”的表,其中包含正在打字的人、他们正在打字的人以及时间的列。每次他们在输入字段中按下一个键时,我都会将其发布到数据库(但这似乎会减慢网站速度)。然后我会运行一些 javascript 来检查输入字段中的列是否早于 5 秒,如果不是,则显示该消息,如果是,则将其删除。

这似乎是一种非常直接的方法,但我想知道是否有更好的选择。我对如此频繁地向数据库发布帖子感到不舒服。那么有人知道更好的方法可以实现这一点吗?如有任何帮助,我们将不胜感激,谢谢。

Lov*_*ing 5

为什么我们不稍微改变一下你的想法呢?将打字的负担放在客户端上,而不是服务器上。

第一次按键后,向服务器发送一个事件,并启动超时。5 秒后,我们会说我们不再打字了。如果还有另一次按键,我们会清除旧的超时,并开始新的超时。这将确保用户在任何时候一致地输入内容,它都会被更新。

如果您的用户重新加载或离开页面就是问题所在。然后他们不会打字,但不会触发超时。为了解决这个问题,我建议您做两件事。首先,当用户请求新页面时,始终将其状态设置为not-typing。为什么?因为至少在那一刻,即使他们打开一个新选项卡,他们也不会打字。其次,如果用户在停止输入触发器之前离开浏览器并关闭,您最终需要清理它们。您可能每小时运行一次 cron,并且任何超过 5 分钟但仍表示仍在打字的 cron 程序,设置为不打字。