2

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

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

4

4 回答 4

4

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

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

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

于 2012-01-25T00:12:09.880 回答
0

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

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

于 2012-01-25T00:05:57.070 回答
0

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

于 2012-01-25T00:09:51.667 回答
0

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

于 2012-01-25T00:09:59.763 回答