用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()

请先 登录 后评论

1 个回答

logger

DolphinDB中数据订阅是push模式,也就是说数据有变化时,发布方会推数据到订阅端。所以订阅端需要有端口在监听。这个端口号,节点中通过配置项subPort设置。在python api中通过s.enableStreaming(port)中的参数port设置。在同个主机上,这些订阅端的监听端口号不能相同。上述问题的原因就是两个订阅端都设了8888.修改其中一个即可解决问题。

可用netstat察看一下端口的状态,比如:

//windows上用
netstat -ano|findstr "8848"

//linux上用
netstat -anlp | grep 8848
请先 登录 后评论