2010-05-08 38 views
1

有人可以说明我可以如何使用javascript获得对方的打字状态吗?实现网络聊天,我如何获得打字状态?

UPDATE

有人可以推荐一到一个开源聊天应用程序,最好是用PHP写的?我只找到所有在线人聊天的开源聊天室,但我只需要一对一聊天。

+0

当你问一个人,你的意思是消息不通过服务器?或者你只是在谈论直接发送另一个用户的信息? – Loki 2010-05-17 16:59:32

回答

1

这是一个更新,以反映OP的问题显著变化:

谷歌聊天和Facebook都使用XMPP(Jabber的)服务器,如大多数的公司我知道,有内部即时通讯。

约XMPP的好处是,你得到所有的“正在输入”等presence为基础的信息,而不必滚你自己在JavaScript(记住,你仍然需要使用JavaScript来传递XMPP请求回到服务器,但XMPP具有您需要内置的大部分功能)。

结账OpenFire。这是一款非常棒的XMPP服务器,完全开放源代码,并且它们有一个基于Web的Spark客户端版本,非常棒。

或者你可以得到一个XMPP的PHP库(有几个)。但是,您仍然需要在后台运行XMPP服务器才能使用PHP。

下面是XMPP.orgXMPP libraries for PHP列表:

  • 艾菲尔
  • JAXL
  • Lightr
  • 太太
  • XMPPHP

或者,如果你想保留的东西大多浏览器端,他们也h AVE的libraries for javascript列表:

  • dojox.xmpp
  • js.io
  • JSJaC
  • strophe.js
  • xmpp4gwt
  • xmpp4js
+0

你正在倾听你自己的事件,那是什么? – user198729 2010-05-08 09:31:23

+0

我不知道我明白。您认为javascript中有某种方法可以查看人们是否在您所在的聊天网站上输入内容?我的解决方案假定您正在构建聊天网站。 – Anthony 2010-05-08 09:35:45

+0

除非网站构建商添加了该功能,否则没有合法的方式可以查看其他用户的活动。其他任何事情都是间谍/黑客攻击。 – Anthony 2010-05-08 09:38:05

0

例如,如果您有一个文本区域#chat然后您可以使用此代码附加事件:

document.getElementById('chat').addEventListener('keydown', FUNCTION HERE, false); 
0

前段时间我做了一个小型聊天应用程序,唯一的办法是频繁检查聊天数据库中的新条目并获取比上次显示的消息更新的任何东西。与此同时,您可以检查用户的输入是否为空。如果是,则什么都不要做。如果不是,则在该用户名旁边的数据库中输入状态码。如果任何人在获取有关新消息和谁在线的信息时在数据库中具有该状态,则应显示“用户正在输入”消息。我希望这是有道理的,如果不是,请告诉我。

+1

轮询服务器不是最好的选择。我在一些项目中也这样做了,但如果聊天应该是一个重要的功能 - 轮询是EVIL。使用http流媒体。 – naugtur 2010-05-17 20:55:40

+0

我有一点四处看,它看起来很有趣,但目前有点在我的头上。我只做了一年的网页开发,而JavaScript只用了6-7个月。不过,我会放弃它。 – user97410 2010-05-21 22:23:27

0

对于用户1:如果将每个按键上的聊天消息保存到数据库,并且status:sent = false并更新上次更新的日期。 对于用户2:您可以定期为存在发送= false的消息进行提示,并使用上次更新的更新用户输入消息。如果最近一次更新的日期超过了十秒钟,您可以删除该消息,因为该人可能已经停止输入。这将允许User2看到User1键入,停止并再次继续。

理想情况下,对这些信息进行轮询是现有数据库调用的一部分,以减少额外的开销。

+0

您的想法甚至会进行更多轮询......除localhost以外的任何服务器都不会足够快速地响应,因为它是合理的。 – naugtur 2010-05-17 20:57:26

+0

@naugtur:任何聊天都会有投票,这就是为什么我表示在现有的投票中这样做,以减少额外的开销。可能这个问题实际上并不需要一个解决方案,考虑到开销,但是如果一个浏览器窗口只为没有其他任务的聊天提供服务,那么额外的轮询可能没问题。 – 2010-05-17 21:05:01

+0

轮询只会发生在服务器端。你最后一句话中的这个想法是件好事。我没有在此下降-1,对吧? ;)但是:'如果将每个按键上的聊天消息保存到数据库'建议向服务器发送大量请求。当用户开始输入时以及停止输入时应该发送一个请求 - 并增加一些额外的时间容差。这是非常重要的 – naugtur 2010-05-17 21:14:57