用于Matlab的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"是正确的,这是有文档记录的(文档,第20ff页),但也应该有流数据本身,不是吗?

那么我该如何获得实际数据呢?

在代码中的某个位置,您应该有一个create_session.txt/bind_session.txt请求,否则您不应该有从control.txt请求中获得OK答案所需的有效会话id(例如,以下生成SYNC ERROR,这意味着服务器无法识别指定的会话:http://push.lightstreamer.com/lightstreamer/control.txt?LS_op=add&LS_session=无效)

control.txt响应上没有接收到数据流,OK响应只是意味着"OK,我已经将订阅添加到您的会话中"。数据流是在create_session.txt/bind_session.txt响应中接收的。您链接的文档的第4.1节和第4.2节以及第4.5节应解释如何接收数据

我发现通过设置LS_polling=true打开轮询连接可以很好地工作,而不需要listner。如果将LS_polling保留为false的默认值,则urlread2将挂起。

  1. 使用/lightstreamer/create_session.txt创建会话
  2. 使用/lightstreamer/control.txt请求订阅
  3. 使用
    反复轮询连接以获取数据/lightstreamer/bind_session.txt

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

最新更新