我正在尝试为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.),但是应该也有流数据本身,不是吗?
那么如何获取实际数据?
答案 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
会挂起。
/lightstreamer/create_session.txt
/lightstreamer/control.txt
/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