2010-04-15 50 views
3

我正在创建一个网站,用户将能够聊天并通过浏览器相互发送文件。我正在使用GWT的UI和休眠与吉利德连接到MySQL数据库后端。什么是最好的方式来实现一个网站,用户可以在一起互动

什么是使用的最佳策略?用户可以一起交互?

+0

它必须是网页(JSP/HTML)还是客户端应用程序(Applet,Webstart)? – BalusC 2010-04-15 23:24:05

+0

对不起,它使用gwt的html weppage – molleman 2010-04-17 19:16:12

回答

2

我想说你正在寻找彗星/ AJAX |服务器推/等。有关这方面的信息,请参阅my previous answer。基本上你是模拟反转服务器和客户端之间的通信 - 这是这是在这里启动连接,因为它想要,例如,通知用户他/她的朋友刚上线等。

这项技术的实施变化相当迅速,所以我不会做出任何明确的建议 - 选择最适合您的需求的建议:)

2

COMET是允许在网页上聊天的技术 - 它基本上是通过保持沟通活动连接。这允许服务器将信息推送给客户端。 GWT在客户端有几种实现方式。 现在大多数服务器都支持这个,它也是Servlet 3.0规范的一部分(目前还没有人实现)

+0

@Romain:已经实现了Servlet 3.0,例如,由Glassfish v3发布。 – 2010-04-16 09:19:29

1

虽然COMET非常好,但它不是唯一的解决方案!通常使用时间间隔进行轮询(而不是COMET长轮询)。也可以要求用户手动刷新。

以Stackoverflow为例 - 对于大多数情况,您必须手动刷新浏览器以查看更改。我认为,它通常被认为是正常的和预期的。 COMET或频繁投票是额外的好处。

COMET的问题是,它可以很容易地导致服务器上的大量线程。除此之外,如果您另外使用异步处理(也称为“高级IO”),但尚未得到很好的支持(例如由于严重错误而无法在Glassfish v3中使用HTTPS),可能会导致Apache连接器等问题

频繁轮询的问题是,它会产生额外的流量。因此,通常需要减少轮询次数,这会使最终用户不太方便。

所以你将不得不权衡你的特定情况的选项。

+0

虽然普通的网络服务器(Apache是​​最大的罪犯,nginx是最小的;))并没有很好地处理这些开放连接,但像APE(Ajax Push Engine)这样的专用服务器和像nginx这样的更好设计的网络服务器相当这是一个挑战;)恕我直言,彗星公司对服务器的压力要比每隔x秒不间断地轮询一次服务器要低得多 - 为了保持客户端数据是最新的,你需要x很小。另外,我不认为在这里完全刷新是一个解决方案,因为这会挫败在GWT中创建网站的全部目的。 – 2010-04-16 11:16:51

+0

@Igor:我同意服务器 - 只是,有些人除了使用Apache之外别无选择!完全刷新后,我不一定要完整刷新页面。它也可以是点击更新链接/按钮,导致Ajax调用。而问题是什么给服务器,Comet或者持续轮询造成了更大的压力,取决于几个因素:如果消息以极快的速度到达,或者它们分布相当均匀,那么COMET的优势很小 - 但是自从COMET是有状态的,你总是有记住状态的开销。这真的取决于! – 2010-04-16 11:56:18

相关问题