我正在尝试为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'}状态=
value: 200
msg: 'OK'isGood =
1输出=
OK响应体包含"OK“是正确的,这是文档化的(documentation, page 20ff.),但也应该有流数据本身,不是吗?
那么我如何获得实际的数据呢?
发布于 2015-04-09 19:13:47
在代码中的某个地方,您应该有一个create_session.txt/bind_session.txt请求,否则您不应该拥有从control.txt请求中获得OK答案所需的有效会话id (例如,下面的代码会生成同步错误,这意味着服务器无法识别指定的会话:http://push.lightstreamer.com/lightstreamer/control.txt?LS_op=add&LS_session=invalid )
在control.txt响应上没有收到数据流,OK响应只是表示"OK,我已将订阅添加到您的会话中“。数据流在create_session.txt/bind_session.txt响应中接收。第4.1节和4.2节+第4.5节on the document you linked应解释数据的接收方式
发布于 2015-04-16 04:58:27
我发现通过设置LS_polling=true来打开轮询连接效果很好,不需要listner。如果将LS_polling保留为false的默认值,urlread2将挂起。
使用/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 1000https://stackoverflow.com/questions/29513250
复制相似问题