用python API订阅流数据时收不到数据
我在DolphinDB中创建了一张流表,然后分别在本地节点中订阅和在python api订阅这张流表,本地节点中订阅能收到流数据,但python api订阅端收不到流数据,请问可能是什么原因?我已经把操作系统的防火墙关掉了。
流数据相关配置如下:
maxPubConnections=10
persistenceDir=d:\database\DolphinDB\streamData
subPort=8888
maxSubConnections=10
mode=single
流数据表与本地订阅代码如下:
def createCheckST(){
colnames = [`ts, `minID,`maxID,`err ]
coltypes = [TIMESTAMP, INT, INT, STRING]
st= streamTable(10000:0, colnames, coltypes)
enableTableShareAndPersistence(st,"mtopst", false, true, 1000,100,0);
st1= streamTable(10000:0, colnames, coltypes)
enableTableShareAndPersistence(st1,"ntopst", false, true, 1000,100,0);
}
createCheckST()
subscribeTable(,tableName="ntopst",actionName="node",handler=mtopst,offset=0)
t=table(now() as ts,1 as minid,1 as maxid,"error" as err)
ntopst.append!(t)
python代码如下:
from threading import Event
import dolphindb as ddb
def h(msg):
print(msg)
s=ddb.session()
s.enableStreaming(8888)
s.subscribe("127.0.0.1",8848,h,"ntopst",actionName="python",offset=0,resub=True)
Event().wait()
DolphinDB中数据订阅是push模式,也就是说数据有变化时,发布方会推数据到订阅端。所以订阅端需要有端口在监听。这个端口号,节点中通过配置项subPort设置。在python api中通过s.enableStreaming(port)中的参数port设置。在同个主机上,这些订阅端的监听端口号不能相同。上述问题的原因就是两个订阅端都设了8888.修改其中一个即可解决问题。
可用netstat察看一下端口的状态,比如: