রিসোর্স লোড হচ্ছে... লোডিং...

উদ্ভাবক ডিজিটাল মুদ্রা পরিমাণিকরণ প্ল্যাটফর্ম websocket ব্যবহারের গাইড ((ডায়াল ফাংশন আপগ্রেড করার পরে বিস্তারিত)

লেখক:ঘাস, তৈরিঃ 2019-04-01 11:06:09, আপডেটঃ 2019-12-04 10:41:25

মূলত সকল ডিজিটাল মুদ্রা এক্সচেঞ্জ ওয়েবসকেট প্রেরণ প্রক্রিয়া সমর্থন করে, কিছু এক্সচেঞ্জ ওয়েবসকেট অ্যাকাউন্টের তথ্য আপডেট করতে সমর্থন করে। rest API এর তুলনায়, ওয়েবসকেট সাধারণত কম বিলম্ব, উচ্চ ফ্রিকোয়েন্সি, প্ল্যাটফর্ম rest API এর ফ্রিকোয়েন্সি সীমাবদ্ধতা ইত্যাদির বাইরে থাকে।https://zhuanlan.zhihu.com/p/22693475

এই নিবন্ধটি প্রধানত FMZ ইনভেন্টর কোয়ালিফাইং প্ল্যাটফর্ম, জাভাস্ক্রিপ্ট ভাষা ব্যবহার করে, প্ল্যাটফর্ম প্যাকেজযুক্ত ডায়াল ফাংশন ব্যবহার করে সংযোগ, ডকুমেন্টেশনগুলিতে নির্দিষ্ট বিবরণ এবং পরামিতি, ডায়াল অনুসন্ধান করে। বিভিন্ন বৈশিষ্ট্যগুলি বাস্তবায়নের জন্য, ডায়াল ফাংশনটি বেশ কয়েকটি আপডেট করেছে। এই নিবন্ধটি এটিকে কভার করবে এবং ডাব্লুএসএস-ভিত্তিক ইভেন্ট ড্রাইভিং কৌশলগুলি এবং মাল্টি-এক্সচেঞ্জ সংযোগের সমস্যাগুলি সম্পর্কে আলোচনা করবে।

1.websocket连接:

সাধারণভাবে, আপনি সরাসরি সংযোগ করতে পারেন, যেমন একটি টিকিট সুরক্ষা টিকার পাওয়ার জন্যঃ

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 ভাষায় সম্পন্ন হয়, সনাক্তকরণের সংযোগটি বিচ্ছিন্ন হয়ে পুনরায় সংযোগ স্থাপন করে, অনুরোধকৃত ডেটা সামগ্রীটি ইতিমধ্যে ইউআরএলে রয়েছে, যেমন মাত্র বিয়াননের উদাহরণটি, এটি ব্যবহারের জন্য খুব সুবিধাজনক, সুপারিশ করা হয়। যারা বার্তা পাঠাতে চান তাদের জন্য পুনরায় সংযোগ প্রক্রিয়াটি নিজেরাই বজায় রাখতে পারেন।

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

কিছু এক্সচেঞ্জের অনুরোধ ইউআরএলে রয়েছে এবং কিছু চ্যানেলের জন্যও সাবস্ক্রাইব করা প্রয়োজন যেমনঃ Coinbase:

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数据
    }
}

wss ডেটা খুব দ্রুত প্রেরণ করা হয়, Go এর নীচের স্তরটি সমস্ত ডেটা কয়েনে বিলম্বিত করে, যখন প্রোগ্রামটি পাঠ্যকে কল করে, তখন এটি আবার ফিরে আসে; এবং রোবটের নিম্নোক্ত আদেশের মতো ক্রিয়াকলাপগুলি বিলম্বিত করে এবং ডেটা জমা হতে পারে। লেনদেনের প্রেরণ, অ্যাকাউন্টের প্রেরণ, গভীরতার ইনপুট প্রেরণ ইত্যাদির জন্য, আমাদের historicalতিহাসিক ডেটা দরকার, বাজারের ডেটার জন্য, আমরা বেশিরভাগ ক্ষেত্রে কেবলমাত্র সর্বশেষের বিষয়ে উদ্বিগ্ন, historicalতিহাসিক ডেটা নিয়ে উদ্বিগ্ন নই।

read (()) যদি কোন প্যারামিটার না থাকে তবে পুরোনোতম ডেটা ফেরত দেয়, যদি কোন ডেটা না থাকে তবে ফিরে আসতে বাধা দেয়। যদি আপনি সর্বশেষতম ডেটা চান তবে আপনি ক্লায়েন্ট.read ((-২) ব্যবহার করে তাত্ক্ষণিকভাবে সর্বশেষতম ডেটা ফেরত দিতে পারেন, তবে যদি কোনও ডেটা না থাকে তবে ফিরে আসে null, পুনরায় উল্লেখ করতে হবে।

ক্যাশে থাকা পুরনো ডেটা কিভাবে ব্যবহার করা হয় এবং কোন ডেটা না থাকলে এটি আটকে যায় কিনা তার উপর নির্ভর করে, read এর বিভিন্ন প্যারামিটার রয়েছে, যেমন নিচের চিত্রটি, যা দেখতে জটিল, কিন্তু প্রোগ্রামটিকে আরও নমনীয় করে তোলে।img

৩. একাধিক এক্সচেঞ্জের ওয়েবসকেট সংযুক্ত করুনঃ

এই পরিস্থিতিতে পদ্ধতিতে স্পষ্টতই সহজ পাঠ্য ব্যবহার করা যাবে না, কারণ একটি এক্সচেঞ্জ অপেক্ষা করা বার্তা আটকে দেয়, যখন অন্য এক্সচেঞ্জটি নতুন বার্তা থাকলেও গ্রহণ করবে না। সাধারণ পদ্ধতিটি হ'লঃ

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.断线重连问题:

এই অংশটি হ'ল সমস্যাযুক্ত, কারণ প্রেরণের ডেটা বাধাগ্রস্ত হতে পারে, বা প্রেরণের বিলম্ব খুব বেশি, এমনকি যদি হার্টবিট গ্রহণ করা যায় না তবে ডেটা এখনও প্রেরণের প্রতিনিধিত্ব করে না, একটি ইভেন্টের ব্যবধান সেট করা যায়, যদি কোনও আপডেট না পাওয়া যায় তবে পুনরায় সংযোগ স্থাপন করা যায়, এবং এটি একটি নির্দিষ্ট সময় এবং rest ফিরে আসা ফলাফলের সাথে তুলনা করা ভাল।

5.使用websocket的一般程序框架:

যেহেতু ইতিমধ্যে পাঠানো ডেটা ব্যবহার করা হয়েছে, তাই প্রোগ্রামটি অবশ্যই ইভেন্ট ড্রাইভ হিসাবে লিখতে হবে, প্রায়শই ডেটা চালানোর জন্য মনোযোগ দিন, যাতে খুব বেশি অনুরোধের ফলে বন্ধ না হয়।

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)
    }
}

6.总结:

বিভিন্ন এক্সচেঞ্জের ওয়েবসকেটের সংযোগের পদ্ধতি, ডেটা প্রেরণের পদ্ধতি, সাবস্ক্রাইবযোগ্য সামগ্রী, ডেটা ফর্ম্যাট প্রায়শই আলাদা হয়, তাই প্ল্যাটফর্মটি প্যাকেজ করা হয় না এবং ডায়াল ফাংশন দিয়ে স্বয়ংক্রিয়ভাবে সংযোগের প্রয়োজন হয়। এই নিবন্ধটি মূলত কিছু মৌলিক সতর্কতা coversেকেছে, যদি প্রশ্ন থাকে তবে প্রশ্নগুলি স্বাগতম।

PS. কিছু এক্সচেঞ্জ যদিও ওয়েবসকেট মার্কেট অফার করে না, কিন্তু প্রকৃতপক্ষে ল্যান্ডিং সাইটটি টেমপ্লেট ফাংশন ব্যবহার করে, আপনি দেখতে পাবেন যে ওয়েবসকেট প্রেরণ ব্যবহার করা হয়।


সম্পর্কিত

আরো

xaifer48wss সংযোগটি কিছুক্ষণ চলার পরে, রিপোর্ট করে json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) এই ত্রুটিটি, দয়া করে জিজ্ঞাসা করুন কিভাবে এটি মোকাবেলা করবেন? স্বয়ংক্রিয় পুনরায় সংযোগ সেট করা হয়েছে, আবার ম্যানুয়ালি একটি পুনরায় লিখতে হবে।

হাওহাওকেন বিএনএ চিরস্থায়ী চুক্তি সংযুক্ত হয়ে গেলে, অ্যাকাউন্টের তথ্য পরিবর্তন করা হয়, এবং এক মিনিট পরে পড়া খালি ফিরে আসে?

xaifer48ঠিক আছে, ধন্যবাদ।

ঘাসত্রুটি সমাধান করুন, বার্তাটি মুদ্রণ করুন এবং দেখুন।

কঠোর পরিশ্রমবিয়ানান বলছে, অ্যাকাউন্টের তথ্য পরিবর্তিত হলেই বার্তা পাঠানো হবে, তাই না?