Lightstreamer背后的魔力是什么?

Sae*_*ati 6 javascript ajax comet http lightstreamer

我将为彗星编程开发一个框架,我不能使用Web套接字或服务器发送事件(因为浏览器支持真的很糟糕).因此,我需要保持HTTP连接的活动状态,并将分块数据发送回客户端.

但是,当您进入工作时,问题就出现了:

  1. 使用XMLHttpRequest是不可能的,因为事实上,IE浏览器不给你xhr.responseText,同时xhr.readyState为3.
  2. 隐藏iframe无用,因为浏览器在我将数据发送回客户端时显示加载器.
  3. 我试图将JavaScript文件发送回客户端,每次都发送函数执行命令,但浏览器在完全加载之前不会执行JavaScript.

但是,当我查看Lightstreamer演示页面时,我看到它一点一点地将JavaScript文件发送回客户端,并且在每一步中,它都会调用该函数并且该函数只是被执行(我不能这样做)部分).似乎Lightstreamer使用AJAX,因为请求只是出现在Firebug的控制台选项卡中,但它也像IE中的魅力一样.

我试图使用他们在请求中设置的每个HTTP头字段,但没有结果.我也尝试使用HTTP Post而不是HTTP Get,但仍然没有结果.

我已经阅读了近20篇关于如何实施彗星的文章,但是没有一篇文章可以解决我遇到的问题:

  1. 如何使其跨浏览器?
  2. 如何在从服务器到达新数据时收到通知(我应该挂钩什么事件)?
  3. 如何使我的页面显示为完全加载到用户(如何实现它,以便浏览器不显示加载活动)?

有人可以帮忙吗?我认为应该有一个非常小的提示或技巧,我不知道在这里将所有概念粘合在一起.有谁知道lightstreamer会做些什么来克服这些问题?

Mar*_*rek 5

SockJS的作者在这里.

  • 如何使其跨浏览器?

这很难,预计会花几个月时间在Opera和IE上获取流媒体传输.

  • 如何在从服务器到达新数据时收到通知(我应该挂钩什么事件)?

根据特定的浏览器,有各种技术.有关一个好的介绍,请查看Socket.IO和SockJS支持的不同后备协议.

  • 如何使我的页面显示为完全加载到用户(如何实现它,以便浏览器不显示加载活动)?

同样,还有特定于浏览器的技巧.一种是在onload事件后延迟加载AJAX.另一种是从DOM绑定和取消绑定iframe.等等.如果您仍然感兴趣,请阅读SockJS或Socket.io代码.

有人可以帮忙吗?我认为应该有一个非常小的提示或技巧,我不知道在这里将所有概念粘合在一起.有谁知道lightstreamer会做些什么来克服这些问题?

基本上,除非你有很强的理由,否则不要重新发明轮子.使用SockJS,Socket.io,faye或其他几十个已解决此问题的项目.


Gre*_*ill 3

但浏览器在 JavaScript 完全加载之前不会执行它。

您是否尝试过发送回包裹在<script>标签中的代码?例如,代替:

<script type="text/javascript">
f(...data1...);
f(...data2...);
Run Code Online (Sandbox Code Playgroud)

尝试

<script type="text/javascript">f(...data1...);</script>
<script type="text/javascript">f(...data2...);</script>
Run Code Online (Sandbox Code Playgroud)