وسائل لوڈ ہو رہے ہیں... لوڈنگ...

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

مصنف:FMZ~Lydia, تخلیق: 2023-07-13 14:03:32, تازہ کاری: 2024-01-03 21:05:36

img

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

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

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

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

ایک براہ راست کنکشن عام طور پر کافی ہے، جیسے کہ سکوں کی سیکورٹی ٹکر کو دھکا دینا:

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

جب واپس آنے والے ڈیٹا کو کمپریسڈ فارمیٹ میں ہوتا ہے تو ، اسے کنکشن کے دوران متعین کرنے کی ضرورت ہوتی ہے۔ کمپریشن فارمیٹ کی وضاحت کرنے کے لئے compress استعمال کیا جاتا ہے ، اور mode اس بات کی نمائندگی کرتا ہے کہ ڈیٹا کے کس حصے (یا تو بھیجنے یا واپس کرنے) کو کمپریسڈ کرنے کی ضرورت ہے۔ مثال کے طور پر ، OKEX سے رابطہ قائم کرتے وقت ، مندرجہ ذیل استعمال کیا جاسکتا ہے:

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

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

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

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

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

2. ویب ساکٹ پڑھنا

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

function main() {
    var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr");
    while (true) {
        var msg = client.read()
        var data = JSON.parse(msg) // Parse json strings into quotable objects 
// Process data 
    }
}

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

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

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

img

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) // Parameter -1 represents no data and return null immediately; it will not occur that being blocked before there is data to be returned 
            var msgCoinbase = coinbase.read(-1)
            if(msgBinance){
                // at this time, Binance has data to return 
            }
            if(msgCoinbase){
                // at this time, coinbase has data to return 
            }
            Sleep(1) // Sleep for 1 millisecond
        }
    }

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

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

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

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

    var tradeTime = Date.now()
    var accountTime = Date.now()
    function trade(data){
        if(Date.now() - tradeTime > 2000){//Here it limits only one trade in 2 seconds 
            tradeTime = Date.now()
            // Trading logic
        }
    }
    function GetAccount(){
        if(Date.now() - accountTime > 5000){//Here it limits GetAccount only once in 5 seconds 
            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)
        }
    }

6. نتیجہ

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

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


مزید