0

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

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

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

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

所有标题 =

      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'}

状态 =

value: 200
  msg: 'OK'

好=

 1

输出 =

OK

响应正文包含“OK”是正确的,这是记录在案的(文档,第 20 页),但也应该有流数据本身,不是吗?

那么如何获取实际数据呢?

4

2 回答 2

1

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

  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
于 2015-04-15T20:58:27.377 回答
1

在您的代码中的某处,您应该有一个 create_session.txt/bind_session.txt 请求,否则您不应该有从 control.txt 请求中获得 OK 答案所需的有效会话 ID(例如,以下会生成 SYNC ERROR,即表示服务器无法识别指定会话: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 节应说明如何接收数据

于 2015-04-09T11:13:47.243 回答