【问题标题】:How to display "User is typing..." to the other user?如何向其他用户显示“用户正在输入...”?
【发布时间】:2012-02-18 06:01:05
【问题描述】:

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

这似乎是一种非常直接的方法,但我想知道是否有更好的选择。我对数据库如此频繁的帖子感到不舒服。那么有没有人知道更好的方法可以做到这一点?任何帮助表示赞赏,谢谢。

【问题讨论】:

标签: javascript jquery sql chat typing


【解决方案1】:

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

first 按键后,向服务器发送一个事件,并开始超时。 5 秒后,我们会说我们不再打字了。如果有另一个按键,我们删除旧的超时,并开始一个新的。这将确保无论何时用户输入一致,都会得到更新。

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

【讨论】:

  • 我不明白如何“向服务器发送事件”。我知道如何为一个人做某事并让另一个人看到它的唯一方法是使用数据库......你能详细说明一下吗?或者给我发一份参考资料?
  • @itdoell 真的,我的意思是使用 AJAX 向服务器上的页面发送请求,然后从该页面查询数据库。如果您不太了解如何使用 AJAX,周围有很多资源,如果您需要,我可以为您指出一些。
  • 哦,我知道怎么用AJAX了,我现在更明白你的意思了。谢谢。
【解决方案2】:

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

唯一的缺点是,如果用户输入一半的消息,则会将用户标记为正在输入,直到他们关闭窗口、意识到并返回发送消息或将其清除为止。但是你可以在发送到服务器之前检测半型消息是否发生了变化。

【讨论】:

    【解决方案3】:

    对于如此简单的事情来说似乎有很多开销,即使你是长轮询(我希望如此)。这实际上取决于连接到 sql 的后端系统。您是否考虑过使用网络套接字来执行此操作?是真正的全双工通信。

    【讨论】:

      【解决方案4】:

      您可以将输入状态卸载到 memcache 或 redis 之类的东西上,因为即使您丢失了用户的输入状态也没关系。并且您只需要读取该值即可告诉其他人用户是否在最后 5 秒内输入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-22
        • 2013-05-21
        • 1970-01-01
        • 2012-12-07
        • 1970-01-01
        相关资源
        最近更新 更多