Php 检测用户在服务器端输入代码的最佳方法是什么。在基于web的聊天应用程序中?

Php 检测用户在服务器端输入代码的最佳方法是什么。在基于web的聊天应用程序中?,php,jquery,chat,Php,Jquery,Chat,我现在正在开发基于web的聊天工具,例如StartDevelopLiveHelp、zopim等。我想添加模块/功能,显示管理员和访问者“键入../正在编写消息..”信息 我有insert jquery change/keyup函数。但是后来呢?我该怎么办。是否将用户“正在键入”的值插入数据库?并且客户端浏览器总是以一定的时间间隔签入 我认为,这样可以使服务器繁忙 有更好的解决办法吗 如果您有一个包含以下元素的表单,请向您表示感谢: <input type='text' id='textFi

我现在正在开发基于web的聊天工具,例如StartDevelopLiveHelp、zopim等。我想添加
模块/功能
,显示
管理员
访问者
“键入../正在编写消息..”
信息

我有insert jquery change/keyup函数。但是后来呢?我该怎么办。是否将用户“正在键入”的值插入数据库?并且客户端浏览器总是以一定的时间间隔签入

我认为,这样可以使服务器繁忙

有更好的解决办法吗


如果您有一个包含以下元素的表单,请向您表示感谢:

<input type='text' id='textField' />
<textarea id='textarea'></textarea>

应用程序处理和显示“键入”状态的方式完全取决于应用程序和数据库。我的建议是使用键入事件触发数据库插入,如下所示:

UPDATE tbl_chatrooms SET typingmoment = NOW() WHERE chatID = :chatID AND userID = :userID;
SELECT userID, IF(typingmoment > NOW() - INTERVAL 10 SECOND, 1, 0) AS typing FROM tbl_chatrooms WHERE chatID = :chatID;
然后,每隔一段时间运行的AJAX将向服务器发出请求,该请求将从如下查询返回数据:

UPDATE tbl_chatrooms SET typingmoment = NOW() WHERE chatID = :chatID AND userID = :userID;
SELECT userID, IF(typingmoment > NOW() - INTERVAL 10 SECOND, 1, 0) AS typing FROM tbl_chatrooms WHERE chatID = :chatID;
基本上,对于聊天中的每个用户,这将根据他们在过去10秒内是否键入任何内容返回1或0。你可能会以5秒左右的间隔跑

编辑:这可以处理基本问题,但如果输入100个字符的消息,最终会向服务器发送100个ajax请求。最好设置一个标志,然后每隔一段时间向服务器报告


<> P>另一个要考虑的是确保你的间隔调用杀死任何活跃的先前调用。将ajax调用设置为
窗口。
全局变量,然后可以在下一个时间间隔中止它,以防它仍在运行。这样,如果您的internet连接出现问题,或者您的internet连接很慢,您就不会有一大堆ajax请求堆积在一个时间表上。查看如何取消请求。

如果您有一个包含某些元素的表单:

<input type='text' id='textField' />
<textarea id='textarea'></textarea>

应用程序处理和显示“键入”状态的方式完全取决于应用程序和数据库。我的建议是使用键入事件触发数据库插入,如下所示:

UPDATE tbl_chatrooms SET typingmoment = NOW() WHERE chatID = :chatID AND userID = :userID;
SELECT userID, IF(typingmoment > NOW() - INTERVAL 10 SECOND, 1, 0) AS typing FROM tbl_chatrooms WHERE chatID = :chatID;
然后,每隔一段时间运行的AJAX将向服务器发出请求,该请求将从如下查询返回数据:

UPDATE tbl_chatrooms SET typingmoment = NOW() WHERE chatID = :chatID AND userID = :userID;
SELECT userID, IF(typingmoment > NOW() - INTERVAL 10 SECOND, 1, 0) AS typing FROM tbl_chatrooms WHERE chatID = :chatID;
基本上,对于聊天中的每个用户,这将根据他们在过去10秒内是否键入任何内容返回1或0。你可能会以5秒左右的间隔跑

编辑:这可以处理基本问题,但如果输入100个字符的消息,最终会向服务器发送100个ajax请求。最好设置一个标志,然后每隔一段时间向服务器报告


<> P>另一个要考虑的是确保你的间隔调用杀死任何活跃的先前调用。将ajax调用设置为
窗口。
全局变量,然后可以在下一个时间间隔中止它,以防它仍在运行。这样,如果您的internet连接出现问题,或者您的internet连接很慢,您就不会有一大堆ajax请求堆积在一个时间表上。查看如何取消请求。

您可以在文本区域捕获按键事件,并使用setTimeout检测用户何时停止键入一段时间。
使用AJAX,您可以将这些事件发送到服务器进行处理。
查看以下链接:


您可以在文本区域捕捉按键事件,并使用setTimeout检测用户何时停止键入一段时间。
使用AJAX,您可以将这些事件发送到服务器进行处理。
查看以下链接:


还可以查看jQuery ajax功能的文档:谢谢@ferow2k。顺便说一句,我已经编辑了我的问题。还可以查看jQuery的ajax功能的文档:谢谢@ferow2k。顺便说一句,我已经编辑了我的问题。
.focus()
.blur()
?使用“用户上次键入时”字段更新数据库。如果使用WebSocket,只需发送“用户正在键入”数据包即可。
.focus()
.blur()
?使用“用户上次键入时间”字段更新数据库。如果你使用websockets,它就像发送一个“用户正在键入”数据包一样简单。谢谢@SuperJet。代码在前端。我对服务器端代码一无所知。我应该用ajax代码写什么。将值“键入”发送到数据库。客户端浏览器总是检查(间隔)?我用一点SQL更新了我的答案,以帮助您开始。谢谢@SuperJet。代码在前端。我对服务器端代码一无所知。我应该用ajax代码写什么。将值“键入”发送到数据库。客户端浏览器总是检查(间隔)?我用一点SQL更新了我的答案,以帮助您开始。