有人能说明我如何用JavaScript获得对方的打字状态吗?
有人能推荐一个一对一的开源聊天应用程序吗,最好是用PHP写的?我只找到了一个开源聊天室,可以在所有在线用户之间聊天,但我只需要一对一的聊天。
cig3rfwq1#
下面是PHP-based open-source instant messaging software的列表。其中一些可能和你有关。
yduiuuwa2#
例如,如果您有一个文本区域#chat,则可以使用以下代码附加事件:
#chat
document.getElementById('chat').addEventListener('keydown', FUNCTION HERE, false);
pbossiut3#
请在此处查看http流和一些现成的解决方案:http://ajaxpatterns.org/HTTP_Streaming这就是google talk的工作原理,并且有现成的php或者c++解决方案这对我来说是一个很大的发现!
3htmauhk4#
这是一项更新,以反映OP问题的重大变化:谷歌聊天和Facebook都使用XMPP(jabber)服务器,我所知道的大多数公司都有内部即时消息。XMPP的好处在于,您可以获得所有的“正在键入”和其他基于presence的信息,而不必使用javascript(请记住,您仍然需要使用javascript将XMPP请求传递回服务器,但XMPP已经内置了您需要的大多数特性)。看看OpenFire,这是一个很棒的XMPP服务器,完全开源,他们有一个基于Web的Spark客户端版本,非常不错。或者你可以得到一个XMPP的PHP库(有一些),但是你仍然需要在后台运行XMPP服务器,以便PHP能够工作。下面是XMPP.org中用于PHP的XMPP库列表:
presence
或者,如果你想让东西主要在浏览器端,他们也有一个javascript库的列表:
watbbzwu5#
不久前我做了一个小的聊天应用程序,唯一的方法就是频繁地检查聊天数据库中的新条目,并获取比上一次显示的消息更新的任何内容。与此同时,您可以检查用户的输入是否为空。如果为空,则什么也不做。如果为空,在用户名旁边输入一个状态代码。当你获取新消息和在线用户的信息时,如果数据库中有任何人具有该状态,您应该显示“用户正在键入”消息。我希望这是有意义的...让我知道如果它不是。
wtzytmuj6#
对于User1:如果您将每次按键时的聊天消息保存到数据库,状态为:sent=false并更新上次更新日期。对于User2:你可以周期性地轮询消息的存在,其中sent=false,并使用最后更新来更新用户正在键入的消息。如果最后更新的日期超过十秒,你可以删除该消息,因为那个人可能已经停止键入。这将允许User2看到User1正在键入,停止并再次继续。理想情况下,对该信息的轮询将是对数据库的现有调用的一部分,以减少额外的开销。
6条答案
按热度按时间cig3rfwq1#
下面是PHP-based open-source instant messaging software的列表。
其中一些可能和你有关。
yduiuuwa2#
例如,如果您有一个文本区域
#chat
,则可以使用以下代码附加事件:pbossiut3#
请在此处查看http流和一些现成的解决方案:http://ajaxpatterns.org/HTTP_Streaming
这就是google talk的工作原理,并且有现成的php或者c++解决方案
这对我来说是一个很大的发现!
3htmauhk4#
这是一项更新,以反映OP问题的重大变化:
谷歌聊天和Facebook都使用XMPP(jabber)服务器,我所知道的大多数公司都有内部即时消息。
XMPP的好处在于,您可以获得所有的“正在键入”和其他基于
presence
的信息,而不必使用javascript(请记住,您仍然需要使用javascript将XMPP请求传递回服务器,但XMPP已经内置了您需要的大多数特性)。看看OpenFire,这是一个很棒的XMPP服务器,完全开源,他们有一个基于Web的Spark客户端版本,非常不错。
或者你可以得到一个XMPP的PHP库(有一些),但是你仍然需要在后台运行XMPP服务器,以便PHP能够工作。
下面是XMPP.org中用于PHP的XMPP库列表:
或者,如果你想让东西主要在浏览器端,他们也有一个javascript库的列表:
watbbzwu5#
不久前我做了一个小的聊天应用程序,唯一的方法就是频繁地检查聊天数据库中的新条目,并获取比上一次显示的消息更新的任何内容。与此同时,您可以检查用户的输入是否为空。如果为空,则什么也不做。如果为空,在用户名旁边输入一个状态代码。当你获取新消息和在线用户的信息时,如果数据库中有任何人具有该状态,您应该显示“用户正在键入”消息。我希望这是有意义的...让我知道如果它不是。
wtzytmuj6#
对于User1:如果您将每次按键时的聊天消息保存到数据库,状态为:sent=false并更新上次更新日期。对于User2:你可以周期性地轮询消息的存在,其中sent=false,并使用最后更新来更新用户正在键入的消息。如果最后更新的日期超过十秒,你可以删除该消息,因为那个人可能已经停止键入。这将允许User2看到User1正在键入,停止并再次继续。
理想情况下,对该信息的轮询将是对数据库的现有调用的一部分,以减少额外的开销。