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

时间:2012-01-25 00:04:00

标签: javascript jquery sql chat typing

我正在开发一个消息系统,我希望在用户输入或不打字时显示。我怎么想我会这样做只是在我的数据库中有一个名为“打字”的表,其中包含谁正在键入的列以及他们输入的人和时间。每次他们按下输入字段中的一个键,我都会发布到数据库(看起来这样会减慢网站速度)。然后我会运行一些javascript,检查输入字段中的列是否超过5秒,如果没有,则显示消息,如果是,则删除它。

这似乎是一种非常直接的方式,但我想知道是否有更好的选择。我对这种频繁发布的数据库感到不舒服。那么有谁知道一个更好的方法可以实现吗?感谢任何帮助,谢谢。

4 个答案:

答案 0 :(得分:4)

为什么我们不改变你的想法。将负担放在客户端而不是服务器上进行输入。

第一次按键之后,向服务器发送一个事件,然后开始超时。 5秒后,我们会说我们不再打字了。如果有另一个按键,我们将删除旧的超时,然后开始一个新的超时。这将确保用户一直打字时,它会被更新。

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

答案 1 :(得分:0)

每隔五秒左右,检查文本输入的内容是否为空白。如果有文字,请将用户标记为输入。

唯一的缺点是,留下半输入的消息将标记用户键入,直到他们关闭窗口,实现并返回发送或清除它。但是,您可以在发送到服务器之前检测半类型消息是否已更改。

答案 2 :(得分:0)

即使你是长期投票(我希望),似乎很多开销也很简单。它真的取决于连接到sql的后端系统。您是否考虑使用Web套接字执行此操作?这是真正的全双工通信。

答案 3 :(得分:0)

您可以将输入状态卸载到memcache或redis之类的内容,因为如果您丢失了用户的输入状态并不重要。因为你只需要读取值来告诉别人用户是否在最近5秒内输入。