2009-06-08 188 views
1

我正在寻找多个用户在不同机器上进行交互的最快方式,我认为这是通过使用服务器作为通信促进者。因此,用户A和用户B都创建了某种类型的服务器的套接字连接,并且每当用户A做一些事情时,它就会向服务器发送消息,然后向服务器B发送消息。Javascript服务器端事件

后面是我'm试图在javascript中做。我已经用XMLSocket在flash中完成了它,所以在JavaScript中有相当的功能吗?

PS:我发现EventSource()在这里:http://dev.w3.org/html5/eventsource/,但我不确定它是否被浏览器实现。理想情况下,它将用于需要实时事件的聊天应用程序,所以每X秒使用一次Ajax调用将会太慢。为什么W3C没有添加这样的HTML 5对象,因为它看起来非常有用。

+1

W3C没有为它添加HTML5对象,因为HTML5将包含它的错误位置。它必须包含在JavaScript标准中,而不是HTML标准中。 – 2009-06-08 13:59:40

回答

2

您可能希望查看Comet (reverse Ajax)以生成服务器发送的事件。据我所知,没有浏览器实现EventSource()

Ajaxian也有a good article about Comet包括例如GTalk的例子。

这个选项可以被认为是“坏”的,因为它可以保持与服务器的连接不断打开,从而增加负载。

您可以考虑每隔X秒发出一次Ajax请求来检查更新。正如我在Ajaxian文章中提到的那样,37Signals每3秒轮询一次实时聊天,这似乎对他们来说“足够好”。

0

那么,你有ajax。这并不保持开放的连接(除了保持连接的情况,但js不能像套接字一样工作)。您从A向服务器发送XML编码的消息,并且B定期轮询服务器以查找消息。服务器必须为每个客户保留一个收件箱。

1

一种方法是使用flash-javascript套接字桥接器。这有几个实现。我用this one。它非常快!这样做的另一个好处是,您不必更改服务器即可使其工作。

0

Flash-JavaScript? Java-JavaScript(即LiveConnect)如何?我现在正在创建一个页面,在那里我使用隐藏的Java applet(宽度和高度为1像素,颜色与背景相同)来完全控制所有良好的低级套接字通信,并从applet调用JavaScript函数在新数据可用时更新网页DOM/HTML。 Java SDK是免费的。 Flash SDK不是,上次我试图找到下载它的地方。

3

这里的情况有所改变。

见截图:

alt text

所有major browsers except IE - 包括Firefox,Webkit(即铬加上桌面/移动Safari浏览器)和Opera有一个chance to implement的HTML5实现的server-side push

这对于iPhone/iPad/Android网络应用程序开发人员来说是个好消息,但对于世界其他地方仍然如此,对于IE6-8的糟糕网络标准实施以及Firefox追赶而言仍然困难重重。

目前的情况是,如果你想跨浏览器支持,那么Dan所描述的Comet server(或反复iFrame/xmlhttp轮询)仍然是你的最佳选择。

+2

现在情况已经改变了。除IE(和Android)之外的所有主流浏览器现在都支持服务器发送的事件(http://caniuse.com/#feat=eventsource)。现在还有[polyfills](https://github.com/remy/polyfills/blob/master/EventSource.js)[可用](https://github.com/Yaffle/EventSource)适用于非本地支持的浏览器太。 – 2012-03-03 09:35:20