将事件处理程序添加到 LightStreamer

Posted

技术标签:

【中文标题】将事件处理程序添加到 LightStreamer【英文标题】:Add event handler to LightStreamer 【发布时间】:2021-02-26 04:25:24 【问题描述】:

我想抓取一个使用 LightStreamer 显示实时数据的网站。如何添加事件处理程序以在 javascript 中接收这些消息? 不幸的是,LightStreamer 没有足够的教程。 以下示例对我有用:

var myEH = function ff(msg) 
            console.log("message receieved.");
        ;
        
App.ls.getSubscriptions()[0].addListener( onItemUpdate : myEH)

当我重新发送“收到的消息”时。使用 msg 变量,我看到一个无意义的数组,这与我在 Chrome DevTools(网络选项卡> ws 部分)中看到的不同。

此外,每个订阅都有 isActive() 和 isSubscribed() 方法。当我根据 getSubscriptions() 返回的数组元素检查它们时,我发现它们都是正确的。但是,实际上,Chrome DevTools 显示只有一个处于活动状态并接收消息。寻找有效订阅是另一个问题。

更新:感谢@Robert 的帮助。最后,我可以理解 getSubscriptions()[6] 包含我需要的内容。其他订阅更新页面中的时钟或其他内容。我从此订阅中提取的项目和字段如下:

var myItems = App.ls.getSubscriptions()[6].getItems();
var myFields = App.ls.getSubscriptions()[6].getFields();
var myEH3 = function ff(msg) 
            console.log('tttt3'); 
        ;
        
var mySub = new Subscription("MERGE", myItems, myFields);
mySub.addListener(myEH3);
App.ls.subscribe(mySub);

但这不起作用。服务器返回错误“找不到数据适配器”。更改为 'mySub.addListener( onItemUpdate: myEH3);'没有帮助。我已经尝试通过 'App.ls.getSubscriptions()[6].addListener( onItemUpdate : myEH3);' 将事件处理程序直接添加到 getSubscriptions()[6],但我的函数从未调用过。任何提示将不胜感激。

【问题讨论】:

你的意思是非 sens 数组。你得到ItemUpdate。在这个实例上,你有一些方法,比如 forEachChangedField 和 getItem 名称。你必须找出一个女巫来获取你的数据。 【参考方案1】:

他们有教程和可靠的 api 文档... from

<script>
  require(["LightstreamerClient", "Subscription", "StaticGrid"], function(LightstreamerClient, Subscription, StaticGrid) 
    var client = new LightstreamerClient(null, "HELLOWORLD");
    client.connect();
    // you have to create your own SubscriptionListener
    var grid = new StaticGrid("hellogrid", true);
    
    var subscription = new Subscription("MERGE", grid.extractItemList(), grid.extractFieldList());
    subscription.addListener(grid);
    
    client.subscribe(subscription);
  );      
</script>  

现在您必须根据follow 接口创建自己的订阅侦听器。然后你的订阅监听器上有 onItemUpdate。

【讨论】:

谢谢@罗伯特。我已经看过这些链接,但我找不到通过它们的方式。在网页中,已经创建了一个从服务器获取数据的 LightstreamerClient,我可以通过查看 Chrome DevTools 中的 ws 选项卡来确认它们。我正在考虑一种方法,将一个事件处理程序附加到这个 LightstreamerClient 以获取消息。我无法创建新的 LightstreamerClient,因为我不知道应该填充哪些项目/字段才能准确接收这些消息。 我认为您必须添加新的订阅侦听器,并在它们上监听 onItemUpdate 事件。顺便说一句,您应该显示您的代码示例,因为您对此问题的排名为 -1。【参考方案2】:

最后,我可以在这个图书馆里找到自己的想法了。搜索网页的 JavaScript 文件,我发现某处 DataAdapter 将设置为订阅。 这是我的最终代码:

var myItems = App.ls.getSubscriptions()[6].getItems();
var myFields = App.ls.getSubscriptions()[6].getFields();
var adaptername = App.ls.getSubscriptions()[6].getDataAdapter();
var myEH3 = function ff(msg) 
            console.log('message received.'); 
        ;
        
var mySub = new Subscription("MERGE", myItems, myFields);
mySub.setDataAdapter(adaptername);
mySub.setRequestedSnapshot("yes");

mySub.addListener(onItemUpdate: myEH3);
App.ls.subscribe(mySub);

【讨论】:

如果您有新问题,请搜索现有问题或提出新问题,但不要在回答中提出后续问题

以上是关于将事件处理程序添加到 LightStreamer的主要内容,如果未能解决你的问题,请参考以下文章

获取 lightstreamer 发送的数据

Lightstreamer java se 客户端 maven

Loadrunner 和 Lightstreamer

使用 JQuery 将事件处理程序添加到 iframe

Lightstreamer 背后的魔力是啥?

如何将简单的 onClick 事件处理程序添加到画布元素?