2

我希望实现类似于 facebook/gmail 聊天的东西。我知道他们使用 comet & jabber 作为他们的技术。但是我对几件事感到困惑。

  1. 我真的需要jabber吗?我可以使用一个简单的 mysql 表来代替 from、to、message、send 和 recd 吗?使用mysql有没有效率低下的地方?有没有性能损失?

  2. 可以使用常规网络服务器实现彗星吗?我需要一些特殊的服务器吗?AFAIK,apache+php 无法处理太多打开的连接?我应该使用简单的轮询,这会对我的系统产生不利影响吗?我可以在普通虚拟主机上开箱即用地使用什么?(因为如果我出售聊天应用程序,它应该适用于大多数人。)

  3. 哪个是(目前)实施彗星的最佳方式?无限 iframe 是个好主意吗?一段时间后不会php超时吗?它会是一个跨浏览器解决方案还是我必须写一些丑陋的黑客?这会导致服务器负载吗?gmail 和 facebook 使用什么来实现永久连接?

4

3 回答 3

3

很好的问题,希望这不会在周末消失在堆栈中。如果你想使用 flash kirupa 有一个关于如何使用 PHP 和套接字的很好的教程。就彗星而言,我相信你必须有某种服务器实现。这就是我现在薄弱的知识的终点。

简单的轮询示例(jquery + asp.net) http://trappedinhoth.blogspot.com/2009/04/ajax-jquery-chat-demo.html

Kirupa 的教程(php5 sockets + flash 8) http://www.kirupa.com/developer/flash8/php5sockets_flash8.htm

开源 Flash 聊天客户端(谷歌,还有更多) https://blueimp.net/ajax/

彗星信息 http://cometdaily.com/

我并没有真正回答您的问题,只是向您指出更多资源。我很好奇别人会怎么回答。

于 2009-05-09T19:56:31.000 回答
2

我真的需要jabber吗?我可以使用一个简单的 mysql 表来代替 from、to、message、send 和 recd 吗?使用mysql有没有效率低下的地方?有没有性能损失?

是的,您确实需要使用 jabber 而不是 mysql。您可以阅读 Stonebraker 等人的 [The End of an Architectural Era (It's Time for a Complete Rewrite)][1],了解为什么不适合使用 RDBMS。

可以使用常规网络服务器实现彗星吗?我需要一些特殊的服务器吗?...我应该使用简单的轮询,这会对我的系统产生不利影响吗?我可以在普通虚拟主机上开箱即用地使用什么?gmail 和 facebook 使用什么来实现永久连接?

彗星是一个有点模糊的术语,但不用担心。你不需要特殊的服务器,你不应该使用轮询。您可以使用 [BOSH][2] - 这也是 Facebook(我怀疑是 Gmail)使用的。

在客户端使用 [JSJaC][3](或 [my fork on Github][4]),在服务器端使用 [ejabberd][5]。两者都支持 [BOSH][6](和 [XMPP over BOSH][7]),这意味着您可以直接与 XMPP 服务器建立 HTTP 连接,避免轮询并处理高流量负载。

所有这些的链接都在http://delicious.com/petef/stackoverflow-843889上添加了书签

于 2009-06-03T18:48:57.443 回答
1

我认为 Jabber 可以安全地概念化为(妈妈)中间件,而 MySQL 肯定是(持久存储)后端。这就是苹果和橙子。

考虑到由于 RDMBS 的 ACID 保证及其扩展特性而遇到的限制,没有一个大型 web2.0 应用程序可以依赖 RDBMS 进行实时消息传递。(考虑在运行中对 SQL 表进行分区以添加更多服务器以了解所涉及的问题之一。)

最重要的考虑因素是系统中消息的持久性。它们是要永久保留还是仅在给定的时间窗口内保留。鉴于它是一个聊天应用程序,很可能是后者。为什么不使用基于内存的存储而不是 RDBMS?

为什么要使用 Jabber?好吧,它是一种标准,因此您将在未来打开互操作的可能性,即使此时这不是问题。

更重要的是,它是一个经过长期认真开发的系统(在互联网狗时代),因此假设它(截至目前)并且将继续比您设法设计的任何东西都更加成熟,这当然是公平的、实施、调试并在内部做好生产准备。

对彗星一无所知,所以不予置评!

于 2009-05-09T19:53:19.977 回答