zhouaini528 / okex-php

Okex API Like the official document interface, Support for arbitrary extension.
MIT License
45 stars 21 forks source link

如何加载多个账号配置呢? #2

Closed panxianhai closed 3 years ago

panxianhai commented 3 years ago

比如一个主账号,多个子账号,每个只账号都有一个api key。websocket那部分是要同时写几个不同的文件来支持这种多账号吗。

zhouaini528 commented 3 years ago

你有多少子账号的key,该SDK会单独记录对应key的数据返回。 列如:

$okex->keysecret([
    'key'=>'key_1',
    'secret'=>'secret_1',
    'passphrase'=>'passphrase_1',
]);
$okex->subscribe([
    //public
    'spot/depth5:BCH-USDT',
    'futures/depth5:BCH-USD-210326',
    'swap/depth5:BCH-USD-SWAP',
    'option/depth5:BTCUSD-20201021-11750-C',

    //private
    'futures/position:BCH-USD-210326',
    'futures/account:BCH-USDT',
    'swap/position:BCH-USD-SWAP',
]);

以上代码就是订阅key_1的数据

如果你有多个key~~,你可以这样

$okex->keysecret([
    'key'=>'key_2',
    'secret'=>'secret_2',
    'passphrase'=>'passphrase_2',
]);
$okex->subscribe([
    //public
    'spot/depth5:BCH-USDT',
    'futures/depth5:BCH-USD-210326',
    'swap/depth5:BCH-USD-SWAP',
    'option/depth5:BTCUSD-20201021-11750-C',

    //private
    'futures/position:BCH-USD-210326',
    'futures/account:BCH-USDT',
    'swap/position:BCH-USD-SWAP',
]);

获取数据也是同理,你只要设置了key 它就会订阅或者读取对应的key

zhouaini528 commented 3 years ago

可以查看日志文件,就会发现, 如果你是多个KEY,日志文件就会出现多个key的连接

panxianhai commented 3 years ago
$okex->keysecret([
    'key'=>'key_1',
    'secret'=>'secret_1',
    'passphrase'=>'passphrase_1',
]);
$okex->keysecret([
    'key'=>'key_2',
    'secret'=>'secret_2',
    'passphrase'=>'passphrase_2',
]);
$okex->subscribe([
    //public
    'spot/depth5:BCH-USDT',
    'futures/depth5:BCH-USD-210326',
    'swap/depth5:BCH-USD-SWAP',
    'option/depth5:BTCUSD-20201021-11750-C',

    //private
    'futures/position:BCH-USD-210326',
    'futures/account:BCH-USDT',
    'swap/position:BCH-USD-SWAP',
]);

可以写成这个样子?还是subscribe也要执行两次。

zhouaini528 commented 3 years ago

subscribe 也要执行两次。 对应的key 执行对应订阅或者读取方法。

如下:

$okex->keysecret([
    'key'=>'key_1',
    'secret'=>'secret_1',
    'passphrase'=>'passphrase_1',
]);
$okex->subscribe([
    //public
    'spot/depth5:BCH-USDT',
    'futures/depth5:BCH-USD-210326',
    'swap/depth5:BCH-USD-SWAP',
    'option/depth5:BTCUSD-20201021-11750-C',

    //private
    'futures/position:BCH-USD-210326',
    'futures/account:BCH-USDT',
    'swap/position:BCH-USD-SWAP',
]);

$okex->keysecret([
    'key'=>'key_2',
    'secret'=>'secret_2',
    'passphrase'=>'passphrase_2',
]);
$okex->subscribe([
    //public
    'spot/depth5:BCH-USDT',
    'futures/depth5:BCH-USD-210326',
    'swap/depth5:BCH-USD-SWAP',
    'option/depth5:BTCUSD-20201021-11750-C',

    //private
    'futures/position:BCH-USD-210326',
    'futures/account:BCH-USDT',
    'swap/position:BCH-USD-SWAP',
]);
zhouaini528 commented 3 years ago

client 订阅和读取可以不用一个进程下面, 跟PHP-FPM一样,跟开发网页一样用过ID或者key来进程订阅。

panxianhai commented 3 years ago

这个应该无法动态的添加keysecret参数了吧,比如之前跑了几个,又动态的往里面添加一个。

zhouaini528 commented 3 years ago

可以动态添加的,前提是server端没有重启过。 你可以看server 输出的日志, 你订阅多个用户私有频道的数据,还可以通过同样的方法再次订阅。 而日志会输出新用户监听的状态。 目前websocket 只支持V3 后期我会把V5 SOCKET 添加上

zhouaini528 commented 3 years ago

server端重启,需要全部重新订阅所有频道。

panxianhai commented 3 years ago

我看websocket的通知里没有key相关的返回,怎么把一个交易对和一个key关联起来呢?

zhouaini528 commented 3 years ago

交易对,无法跟key关联。交易对是属于公共数据的, 任何key都可以获取

panxianhai commented 3 years ago

我的意思是,我订阅了key1和key2的订单交易通知,workerman只有一个进程,这样订单通知过来的时候分不出来是哪个key的订单。

zhouaini528 commented 3 years ago
$okex->keysecret([
    'key'=>'key_1',
    'secret'=>'secret_1',
    'passphrase'=>'passphrase_1',
]);
//你设置了config 获取到的数据只能是key_1的
$okex->getSubscribes()
panxianhai commented 3 years ago

请问下,如何利用client实时监听订阅的数据呢,目前server端已经运行起来了,但是client并没有实时监听,client实时监听的例子有吗。

zhouaini528 commented 3 years ago

你可以看看这个websocket获取行情的例子,https://github.com/zhouaini528/websocket-market

panxianhai commented 3 years ago

php huobi_client_spot.php start -d

client执行的时候,提示已经在运行了,就是和server冲突了,所以运行不起来,V5的版本。行情那个好像是V3的版本。

zhouaini528 commented 3 years ago

你ps一下看你是否没有把进程杀死, 每次重启server和client 要把对应的交易所进程杀死 你可以这样试试 php huobi_client_spot.php stop

panxianhai commented 3 years ago

V5的版本。行情那个好像是V3的版本。我clone行情软件可以运行起来。我运行这个库的test里面的v5,两个不能同时运行起来。

zhouaini528 commented 3 years ago

原理都一样的,你把demo里面的代码以及订阅 换成V5也行。 无论V5 V3 server必须守护进程,client可以不用守护, 你php 运用一次 getSubscribes() 就可以获取当前数据

zhouaini528 commented 3 years ago

逻辑原理:server 获取交易所数据、client 获取server已经缓存在本地的数据。