زیادہ تر کریپٹوکرنسی تبادلے ویب ساکٹ کے ذریعے مارکیٹ کے ڈیٹا بھیجنے کی حمایت کرتے ہیں ، اور کچھ تبادلے ویب ساکٹ کے ذریعہ اکاؤنٹ کی معلومات کو اپ ڈیٹ کرنے کی بھی حمایت کرتے ہیں۔ REST API کے مقابلے میں ، ویب ساکٹ میں عام طور پر کم تاخیر ، زیادہ تعدد ہوتا ہے ، اور پلیٹ فارم کی آرام API کی شرح کی حدود سے مشروط نہیں ہوتا ہے۔ تاہم ، اس میں ممکنہ مداخلت اور کم بدیہی ہینڈلنگ کا نقصان ہے۔
اس مضمون میں بنیادی طور پر ڈائل فنکشن کے استعمال کا تعارف کیا جائے گا ، جو ایف ایم زیڈ کوانٹ پلیٹ فارم میں جاوا اسکرپٹ زبان کا استعمال کرتے ہوئے احاطہ کرتا ہے۔ مخصوص ہدایات اور پیرامیٹرز کو
ایک براہ راست کنکشن عام طور پر کافی ہے، جیسے کہ سکوں کی سیکورٹی ٹکر کو دھکا دینا:
var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")
جب واپس آنے والے ڈیٹا کو کمپریسڈ فارمیٹ میں ہوتا ہے تو ، اسے کنکشن کے دوران متعین کرنے کی ضرورت ہوتی ہے۔ کمپریشن فارمیٹ کی وضاحت کرنے کے لئے
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"]}')
عام طور پر ، اسے لامحدود لوپ میں مستقل طور پر پڑھا جاسکتا ہے۔ کوڈ مندرجہ ذیل ہے:
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 واپس کردے گا ، جس کا حوالہ دینے سے پہلے فیصلہ کرنے کی ضرورت ہے۔
پرانے کیچڈ ڈیٹا سے نمٹنے کے طریقہ پر منحصر ہے اور جب کوئی ڈیٹا نہیں ہوتا ہے تو اسے مسدود کردیا جاتا ہے ،
اس معاملے میں یہ واضح ہے کہ صرف
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
}
}
پروسیسنگ کا یہ حصہ زیادہ پریشان کن ہے ، کیونکہ پش ڈیٹا میں خلل پڑ سکتا ہے ، یا پش تاخیر انتہائی لمبی ہے۔ یہاں تک کہ اگر دل کی دھڑکن موصول ہوسکتی ہے تو ، اس کا مطلب یہ نہیں ہے کہ اعداد و شمار کو ابھی بھی دھکا دیا جارہا ہے۔ آپ ایونٹ کا وقفہ طے کرسکتے ہیں۔ اگر وقفے کے بعد کوئی تازہ کاری موصول نہیں ہوتی ہے تو ، دوبارہ رابطہ قائم کریں۔ یہ دیکھنے کے لئے کہ آیا اعداد و شمار درست ہیں ، وقت کی ایک مدت کے بعد
کے لئے دھکا ڈیٹا استعمال کیا گیا ہے، پروگرام قدرتی طور پر واقعہ ٹرگر کے طور پر لکھا جائے گا؛ دھکا ڈیٹا کی تعدد پر توجہ دینا، کیونکہ اعلی تعدد کی درخواستوں کو بلاک کیا جائے گا کی قیادت کریں گے؛ عام طور پر آپ لکھ سکتے ہیں:
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)
}
}
ہر پلیٹ فارم پر کنکشن کا طریقہ ، ڈیٹا ٹرانسمیشن کا طریقہ ، سبسکرائب کردہ مواد اور ویب ساکٹ کا ڈیٹا فارمیٹ اکثر مختلف ہوتا ہے ، لہذا پلیٹ فارم اسے انکیپسول نہیں کرتا ہے اور خود ہی مربوط ہونے کے لئے ڈائل فنکشن کا استعمال کرنے کی ضرورت ہوتی ہے۔ اس مضمون میں بنیادی طور پر کچھ بنیادی احتیاطی تدابیر کا احاطہ کیا گیا ہے۔ اگر آپ کے پاس مزید سوالات ہیں تو ، براہ کرم بلا جھجھک پوچھیں۔
پی ایس: اگرچہ کچھ پلیٹ فارم ویب ساکٹ اقتباسات فراہم نہیں کرتے ہیں ، در حقیقت ، جب آپ ڈیبگنگ فنکشن استعمال کرنے کے لئے ویب سائٹ پر لاگ ان کرتے ہیں تو ، آپ کو معلوم ہوگا کہ وہ سب ویب ساکٹ پش کا استعمال کررہے ہیں۔ تحقیق کے بعد ، آپ کو معلوم ہوگا کہ کچھ سبسکرپشن فارمیٹس اور واپسی کی شکلیں خفیہ شکل میں دکھائی دیتی ہیں ، جو بیس 64 کے ساتھ ڈیکوڈنگ اور ڈیکمپریسنگ کرکے دیکھی جاسکتی ہیں۔