2015-04-08 38 views
0

我正在嘗試爲Matlab構建一個lightstreamer客戶端。對於像JAVA,Python,.Net等平臺,確實存在一些庫。但不幸的是不是Matlab。 但是,事實證明,這些客戶端實現中的大部分都使用與lightstreamer完全相同的文本模式協議,這是非常基本的HTTP請求。用於Matlab的Lightstreamer客戶端

我想出瞭如何建立/關閉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.),但應該是流數據本身爲好,不是嗎?

那麼如何獲得實際數據呢?

+0

我發現在瀏覽器中使用整個URL查詢導致以下lightstream響應錯誤:「SYNC ERROR」。也許這提供了一個提示? – flimm

+0

在回答之後,我意識到你可能已經在觀察數據流的正確響應了,如果是這樣的話,那麼可能是因爲沒有數據流?你有沒有要求提供快照?你在控制服務器嗎? – Mone

回答

1

你的代碼中的某個地方應該有一個create_session.txt/bind_session.txt請求,否則你不應該有一個有效的會話ID,它需要從一個control.txt請求獲得一個OK應答(例如,下面的代碼生成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節on the document you linked應解釋如何接收數據

+0

「綁定會話」的建議可能是答案。我實際上認爲它是直接使用control.txt完成的。該文檔有點誤導,我認爲它具有與unix中的屏幕命令類似的行爲。我會嘗試併發布答案。非常感謝你! – flimm

1

我發現通過設置LS_polling=true打開輪詢連接可以正常工作,無需使用列表程序。如果您將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