设置回调以响应LightStreamer通道上的传入消息。

4次浏览(最近30天)
尼尔凯蒂斯
尼尔凯蒂斯 2015年4月27日
我想读一个开放频道 灯泡 ,特别是灯光服务器服务 IG.
LS以两种模式运行:流和轮询(流媒体是首选)。我已经成功地写了很多代码来处理轮询连接(设置 LS_polling = true /lightstreamer/create_session.txt.txt. 是默认值)但处理流连接将比更有效并非常简化过程。
我一直在用吉姆·霍肯森的 URLREAD2 函数用于轮询,但如果我在在线的流模式下尝试它,它似乎挂起 263 以下情况,如果这对任何人有帮助。
260 bytearrayoutputstream = java.io.bytearrayOutputStream;
261%此StreamCopier不受支持,可能随时更改金宝app。哦,伟大的:/
262 ISC = InterruptiBlestreamCopier.GetIntErruptiBlestreamCopier;
263 isc.copyStream (inputStream, byteArrayOutputStream);
264 InputStream.Close;
265 bytearrayoutputstream.close;
我想知道是否可能对URLREAD2进行一些修改,可以打开连接,并允许设置回调来处理传入的消息?
2的评论
尼尔凯蒂斯
尼尔凯蒂斯 2015年4月29日
我在这方面取得了一些进展 StreamCopier 上面需要被拦截并用检测到eol的东西替换( \ r \ n )并触发事件通知器。
就像这样:(有点粗糙,但它让我现在用流做实验)
bytearrayoutputstream =零(1,256);%<----捕获如果超过
我= 1;%<----从1开始,所以第一个条目是2
尝试
尽管真的
我=我+ 1;
byteArrayOutputStream (i) = read;
如果isequal (byteArrayOutputStream(张:我),[10]13)%“\ r \ n”
输出= char(bytearrayoutputstream(2:i));
bytearrayoutputstream(:) = 0;我= 1;%<----重置
流('%s',输出)%<----替换事件通知程序
结束
结束
抓住
%待办事项
结束
输出类似于以下内容:
SessionId: S3d11cddde1b7455aT4829892
controladdress:apd120a.marketdatasystems.com.
KeepaliveMillis: 5000
MaxBandwidth: 0.0
RequestLimit: 50000
1、可交易| 3 | 15356.4 | 0.5714285
1,1 | 7991.0 | Tradeable | 0.5714285
1, 8 | 12055.4 | 0.5524861 |流通股
1、可交易| 6 | 18317.7 | 0.5714285
1,7 | 9533.7 | Tradeable | 0.5524861
1,5 | 13116.0 | Tradeable | 0.5714285
1、可交易| 4 | 11928.5 | 0.5524861
1,2 | 10995.5 | Tradeable | 0.5524861
...
所以我想我的问题变成:在包含的java类中是否已经有一种有效的方法来做到这一点 com.mathworks.mlwidgets.io.interuptiblestreamcopier. 我不知道?

登录评论。

接受答案

尼尔凯蒂斯
尼尔凯蒂斯 2015年4月30日
这有点像和自己对话(会发生)。不管怎样,既然我开始了,我就继续。结果并没有我想象的那么复杂。我可以去掉很多 URLREAD2 对于这种专用的情况,然后解码流是很好的定义。剩下的就是把它转换成 classdef 并处理事件。
功能输出= URLREADL(URL,BODY,VARARARGIN)
% +网址
尝试
协议= url(1:找到(url = =':'1) 1);
handler = sun.net.www.protocol。(协议).Handler;
url = java.net.URL ([], url,处理程序);
urlConnection = url.openConnection;
urlConnection.setRequestMethod (“职位”);
抓住
%待办事项
重新抛出(我)
结束
%+身体
尝试
身体= Unicode2native(身体,'');
URLConnection.setRequestProperty(内容长度的,Int2str(长度(body)));
URLConnection.setDoOutput(true);
抓住
%待办事项
重新抛出(我)
结束
% +帖子
尝试
outputStream = urlConnection.getOutputStream;
OutputStream.Write(Body);
outputStream.close;
抓住
%待办事项
重新抛出(我)
结束
% +蒸汽
inputStream = urlConnection.getInputStream;
%读第一行;它将是“错误”,“确定”,
%或可能的HTTP错误500。
行= linereader (inputStream);
转变线
案件'错误'
%只有2行;然后关闭流。
output.error.err_code =.线reader(inputStream);
output.ERROR。err_msg = linereader (inputStream);
inputStream.close;
案件“好吧”
百分比在表单中有3个和6行:
% "ParamName:" + ParamValue + "\r\n",后面跟着一个空格
% 线。空白行标记了推送阶段的开始。
行= linereader (inputStream);
尽管〜isempty(线)
param = regexp(行,':'“分裂”);
output.ok。(param {1})= param {2};
行= linereader (inputStream);
结束
%处理推送阶段。
尝试
尽管真的
行= linereader (inputStream);
DISP(线)
结束
抓住
结束
否则
%可能是HTTP 500;我不知道这到底是什么样子
%直到我看到一个。TODO:确认它是一个500或单独处理。
output.error.err_code =.“500”
output.ERROR。err_msg =线;
节省errorline线
inputStream.close;
结束
功能Line = LineReader(InputStream)
bytearray(1)= InputStream.read;% <——“O”
ByteArray(2)= InputStream.read;< %——“K”
尽管〜Isequal(ByteArray(最终-1:结束),[13 10])
bytearray(end + 1)= InputStream.read;
结束
行= char(中byteArray (1: end-2));
1评论
安德里亚Giovannetti
安德里亚Giovannetti 2015年11月9日
这是惊人的。我想知道是否有人带着这样的目的承担了urlread2的工作。我的问题其实相当简单,但我仍然没有成功地解决它。我在使用LS_pooling时陷入了困境,更准确地说,我试图保持一个标准化的输出,因此缺少值更新(由于MERGE)仍然会产生一些“空白”输出,我可以将其解释为“no-update”条件……我可以问你一个建议吗?谢谢,

登录评论。

更多的答案(0)

标签

社区宝藏狩猎

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!