3
پر توجہ دیں
1444
پیروکار

موجد ڈیجیٹل کرنسی مقداری پلیٹ فارم ویب ساکٹ کے استعمال کی گائیڈ (ڈائل فنکشن اپ گریڈ کے بعد تفصیلی وضاحت)

میں تخلیق کیا: 2019-04-01 11:06:09, تازہ کاری: 2019-12-04 10:41:25
comments   5
hits   5811

بنیادی طور پر تمام ڈیجیٹل کرنسی کے تبادلے میں ویب سوکیٹ بھیجنے کے حالات کی حمایت کی جاتی ہے ، کچھ تبادلے میں ویب سوکیٹ اکاؤنٹ کی تازہ کاری کی معلومات کی حمایت کی جاتی ہے۔ باقی API کے مقابلے میں ، ویب سوکیٹ عام طور پر کم تاخیر ، اعلی تعدد ، پلیٹ فارم کی باقی API تعدد کی پابندیوں سے آزاد ہے ، اور اسی طرح کے ساتھ ساتھ آپ کے ساتھ ، نقصانات میں رکاوٹ کا مسئلہ ہے ، اور اس سے نمٹنا بدیہی نہیں ہے۔ ویب سوکیٹ کے بارے میں ، آپ اس مضمون کا حوالہ دے سکتے ہیں جو میں نے پہلے کیا تھا: https://zhuanlan.zhihu.com/p/22693475

اس مضمون میں بنیادی طور پر ایف ایم زیڈ کے تخلیق کاروں کی پیمائش کرنے والے پلیٹ فارم کے بارے میں بات کی جائے گی ، جس میں جاوا اسکرپٹ زبان کا استعمال کیا گیا ہے ، جس میں پلیٹ فارم میں شامل ڈائل فنکشن کا استعمال کیا گیا ہے۔ دستاویزات میں تفصیلات اور پیرامیٹرز ، ڈائل تلاش کریں ، جس میں مختلف افعال کو انجام دینے کے لئے ڈائل فنکشن کو کئی بار اپ ڈیٹ کیا گیا ہے۔ اس مضمون میں اس کا احاطہ کیا جائے گا ، اور ڈبلیو ایس ایس پر مبنی واقعہ سے چلنے والی حکمت عملی ، اور ملٹی ایکسچینج کو مربوط کرنے کے بارے میں بھی بات کی جائے گی۔

1. ویب ساکٹ کنکشن:

عام طور پر ، براہ راست رابطے دستیاب ہیں ، جیسے کرنسی کے حفاظتی ٹکر کو آگے بڑھانا:

var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")

واپسی کے اعداد و شمار کے لئے کمپریشن فارمیٹ ہے، کنکشن میں وضاحت کی ضرورت ہے، کمپریس مخصوص کمپریشن فارمیٹ، موڈ کی نمائندگی کرتا ہے کہ واپسی کے اعداد و شمار کو بھیجنے کے لئے جس میں کمپریشن کی ضرورت ہوتی ہے، جیسے کنکشن OKEX:

var client = Dial("wss://real.okex.com:10441/websocket?compress=true|compress=gzip_raw&mode=recv")

ڈائل فنکشن دوبارہ جوڑنے کی حمایت کرتا ہے ، جو بنیادی Go زبان کے ذریعہ کیا جاتا ہے ، جس کا پتہ لگایا جاتا ہے کہ کنکشن کاٹ دیا گیا ہے اور دوبارہ جوڑ دیا گیا ہے۔ درخواست کے اعداد و شمار کے مواد کو پہلے سے ہی یو آر ایل میں ، جیسے ابھی بائنان کی مثال میں ، استعمال کرنے کے لئے آسان ہے ، تجویز کردہ ہے۔ آرڈر شدہ پیغامات بھیجنے کی ضرورت کے ل you ، آپ خود ہی دوبارہ جوڑنے کا طریقہ کار برقرار رکھ سکتے ہیں۔

var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr|reconnect=true")

سبسکرائب کریں ڈبلیو ایس ایس کی خبریں ، کچھ تبادلے کی درخواستیں یو آر ایل میں ہیں ، اور کچھ چینلز کو بھی اپنی سبسکرائب بھیجنے کی ضرورت ہے ، جیسے سکے بیس:

client = Dial("wss://ws-feed.pro.coinbase.com", 60)
client.write('{"type": "subscribe","product_ids": ["BTC-USD"],"channels": ["ticker","heartbeat"]}')

2. websocket پڑھتا ہے:

عام طور پر ڈائی لوپ میں مسلسل پڑھنے کے لئے، کوڈ مندرجہ ذیل ہے:

function main() {
    var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr");
    while (true) {
        var msg = client.read()
        var data = JSON.parse(msg) //把json字符串解析为可引用的object
// 处理data数据
    }
}

ڈبلیو ایس ایس ڈیٹا کو آگے بڑھانے کی رفتار تیز ہے ، گو کے نچلے حصے میں تمام اعداد و شمار قطار میں محفوظ کردیئے جاتے ہیں ، جیسے پروگرام پڑھتے ہیں ، اور پھر باری باری واپس آتے ہیں۔ جبکہ روبوٹ کے نیچے والے آپریشن تاخیر کا باعث بنتے ہیں ، جس سے اعداد و شمار کا ذخیرہ ہوسکتا ہے۔ اس طرح کے معاملات کو آگے بڑھانے ، اکاؤنٹ کو آگے بڑھانے ، گہرائی میں داخل کرنے والے اعداد و شمار کو آگے بڑھانے وغیرہ کے لئے ، ہمیں تاریخی اعداد و شمار کی ضرورت ہوتی ہے۔

read() اگر کوئی پیرامیٹرز شامل نہیں ہیں تو ، سب سے پرانا ڈیٹا واپس آجائے گا ، اگر کوئی ڈیٹا نہیں ہے تو اسے واپس کرنے کے لئے مسدود کردیا جائے گا۔ اگر آپ تازہ ترین ڈیٹا چاہتے ہیں تو ، آپ فوری طور پر تازہ ترین ڈیٹا کو واپس کرنے کے لئے client.read(-2) کا استعمال کرسکتے ہیں ، لیکن جب کوئی ڈیٹا نہیں ہے تو واپس لوٹائیں۔

اس پر منحصر ہے کہ کیشڈ پرانے ڈیٹا کے ساتھ کیا سلوک کیا جاتا ہے ، اور اگر کوئی ڈیٹا بلاک نہیں ہوتا ہے تو ، اس میں مختلف پیرامیٹرز ہوتے ہیں ، جیسا کہ ذیل میں دکھایا گیا ہے ، جو پیچیدہ لگتا ہے ، لیکن پروگرام کو زیادہ لچکدار بنا دیتا ہے۔ موجد ڈیجیٹل کرنسی مقداری پلیٹ فارم ویب ساکٹ کے استعمال کی گائیڈ (ڈائل فنکشن اپ گریڈ کے بعد تفصیلی وضاحت)

3۔ ایک سے زیادہ ایکسچینج ویب ساکٹ سے منسلک کریں:

اس طرح کے معاملات کے لئے ، یہ واضح ہے کہ اس عمل میں سادہ read () کا استعمال نہیں کیا جاسکتا ہے ، کیونکہ ایک تبادلے میں انتظار کے پیغامات کو مسدود کردیا جائے گا ، اس دوران دوسرا تبادلے کو کوئی نیا پیغام موصول نہیں ہوگا ، یہاں تک کہ اگر اس میں کوئی نیا پیغام موجود ہو۔ عام طریقہ کار یہ ہے کہ:

function main() {
    var binance = Dial("wss://stream.binance.com:9443/ws/!ticker@arr");
    var coinbase = Dial("wss://ws-feed.pro.coinbase.com", 60)
    coinbase.write('{"type": "subscribe","product_ids": ["BTC-USD"],"channels": ["ticker","heartbeat"]}')
    while (true) {
        var msgBinance = binance.read(-1) // 参数-1代表无数据立即返回null,不会阻塞到有数据返回
        var msgCoinbase = coinbase.read(-1)
        if(msgBinance){
            // 此时币安有数据返回
        }
        if(msgCoinbase){
            // 此时coinbase有数据返回
        }
        Sleep(1) // 可以休眠1ms
    }
}

4۔ دوبارہ رابطہ قائم کرنے کا مسئلہ:

اس حصے کو سنبھالنے میں کافی پریشانی ہوتی ہے ، کیوں کہ آگے بڑھنے والا ڈیٹا رک سکتا ہے ، یا آگے بڑھنے میں تاخیر بہت زیادہ ہوتی ہے ، یہاں تک کہ اگر دل کی دھڑکن موصول ہوتی ہے تو اس کا مطلب یہ نہیں ہے کہ ڈیٹا ابھی بھی آگے بڑھ رہا ہے۔ آپ ایک واقعہ کا وقفہ ترتیب دے سکتے ہیں ، اگر وقفہ سے زیادہ اپ ڈیٹ موصول نہیں ہوتا ہے تو دوبارہ رابطہ کریں ، اور بہتر ہے کہ کچھ وقت کے بعد باقی کے ساتھ واپس آنے والے نتائج کا موازنہ کریں ، دیکھیں کہ آیا اعداد و شمار درست ہیں۔

5۔ ویب سوکٹ کے استعمال کے لیے عمومی پروگرامنگ فریم ورک:

چونکہ پش ڈیٹا کا استعمال ہوچکا ہے ، پروگرام کو قدرتی طور پر ایونٹ ڈرائیو کے طور پر بھی لکھا جانا چاہئے ، نوٹ کریں کہ ڈیٹا کو کثرت سے آگے بڑھایا جاتا ہے ، بہت زیادہ درخواستوں کی وجہ سے بند نہیں ہوتا ہے ، عام طور پر یہ لکھا جاسکتا ہے:

var tradeTime = Date.now()
var accountTime = Date.now()
function trade(data){
    if(Date.now() - tradeTime > 2000){//这里即限制了2s内只交易一次
        tradeTime = Date.now()
        //交易逻辑
    }
}
function GetAccount(){
    if(Date.now() - accountTime > 5000){//这里即限制了5s内只获取账户一次
        accountTime = Date.now()
        return exchange.GetAccount()
    }
}
function main() {
    var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr|reconnect=true");
    while (true) {
        var msg = client.read()
        var data = JSON.parse(msg)
        var account = GetAccount()
        trade(data)
    }
}

خلاصہ:

ہر ایک ایکسچینج کے ویب ساکٹ کا رابطہ ، ڈیٹا بھیجنے کا طریقہ ، سبسکرائب کرنے کے قابل مواد ، اور ڈیٹا فارمیٹ مختلف ہوتے ہیں۔ لہذا پلیٹ فارم کو پیکج نہیں کیا جاتا ہے۔ اسے ڈائل فنکشن کے ذریعہ خود سے منسلک کرنے کی ضرورت ہے۔ اس مضمون میں بنیادی طور پر کچھ بنیادی احتیاطی تدابیر کا احاطہ کیا گیا ہے۔ اگر آپ کے پاس سوالات ہیں تو ، پوچھنے کا خیرمقدم کریں۔

پی ایس۔ کچھ ایکسچینجز اگرچہ ویب ساکٹ ٹریڈنگ کی پیش کش نہیں کرتے ہیں ، لیکن اصل میں ویب سائٹ پر جانے کے لئے فارمیٹنگ کا استعمال کرتے ہوئے ، آپ کو یہ پتہ چل جائے گا کہ سبسکرائب کرنے کے لئے ویب ساکٹ پش استعمال کیا جاتا ہے ، اور اگر آپ اس پر تحقیق کریں گے تو آپ کو سبسکرائب فارمیٹ اور ریٹرن فارمیٹ مل جائے گا۔