用于Matlab的Lightstreamer客户端

时间:2015-04-08 11:23:56

标签: matlab http post lightstreamer

我正在尝试为Matlab构建一个lightstreamer客户端。确实存在一些用于JAVA,Python,.Net等平台的库。但遗憾的是不是Matlab。 然而,事实证明,大多数这些客户端实现使用与lightstreamer完全相同的文本模式协议,这是非常基本的HTTP请求。

我想出了如何建立/关闭一个lightstreamer会话。我得到了sessionId,我可以使用这个id来订阅我想要流的数据。但是,虽然我确实得到了订阅呼叫的有效响应,但没有数据被推送。

我使用urlead2函数,响应似乎很好:

 [output,extras]      = urlread2([lightstream_url,'/lightstreamer/control.txt'],'POST',body,headers);

allHeaders =

      Response: {'HTTP/1.1 200 OK'}
        Server: {'Lightstreamer'}
  Content_Type: {'text/plain; charset=iso-8859-1'}
 Cache_Control: {'no-store'  'no-cache'}
        Pragma: {'no-cache'}
       Expires: {'Thu, 1 Jan 1970 00:00:00 GMT'}
          Date: {'Wed, 8 Apr 2015 11:15:02 GMT'}
Content_Length: {'4'}

status =

value: 200
  msg: 'OK'

isGood =

 1

输出=

OK

响应正文包含" OK"是正确的,这是记录(documentation, page 20ff.),但是应该也有流数据本身,不是吗?

那么如何获取实际数据?

2 个答案:

答案 0 :(得分:1)

在代码中的某处你应该有一个create_session.txt / bind_session.txt请求,否则你不应该有一个有效的会话ID来获取control.txt请求的正确答案(例如,以下内容生成SYNC错误,这意味着服务器无法识别指定的会话:http://push.lightstreamer.com/lightstreamer/control.txt?LS_op=add&LS_session=invalid

在control.txt响应中未收到数据流,OK响应只是表示“确定我已将订阅添加到您的会话”。 在create_session.txt / bind_session.txt响应中接收数据流。第4.1节和第4.2节+第4.5节on the document you linked应说明如何接收数据

答案 1 :(得分:1)

我发现通过设置LS_polling=true打开轮询连接可以正常工作而无需列表器。如果您将urlread2保留为LS_polling的默认值,则false会挂起。

  1. 使用/lightstreamer/create_session.txt
  2. 创建会话
  3. 使用/lightstreamer/control.txt
  4. 申请订阅
  5. 重复轮询连接以获取数据 /lightstreamer/bind_session.txt
  6. urlread2的回复将如下所示:

    d =
    
    OK
    SessionId:S9b09da8ebd6b835aT5316913
    ControlAddress:apd119a.marketdatasystems.com
    KeepaliveMillis:1000
    MaxBandwidth:0.0
    RequestLimit:50000
    
    1,1|10162.00|0.00|0.00
    2,2|10686.8|TRADEABLE|0.5524861
    2,13|1202.6|CLOSED|0.5714285
    2,14|5900.51|CLOSED|0.5714285
    ...
    
    LOOP 1000