REST와 Websocket이 있는 경우, Websocket은 여러 가지 불가피한 요인으로 인해 연결이 강제적으로 끊어지게 됩니다. 이 경우에는 오류를 용인하는 장치가 필요합니다. REST는 종종 가장 안정적인 방법입니다. OKEx와 같은 동일한 플랫폼에서 실행되는 여러 가지 정책이 동일한 서버에서 실행되는 경우 REST API에 대한 접근은 주파수 제한이 있습니다 (자세한 내용은 플랫폼 API 문서를 참조하십시오). IP 제한, 계정 제한 또는 두 가지의 조합과 같은 여러 가지 제한 방법이 있습니다. REST 요청의 빈도를 줄일 수 있는 상황 센터


// a client for market center, https://github.com/goex-top/market_center
// api list
// * GetSupportList
// * SubscribeSpotTicker
// * SubscribeSpotDepth
// * ~~SubscribeSpotTrade~~
// * GetSpotTicker
// * GetSpotDepth
// * ~~GetSpotTrade~~
// * SubscribeFutureTicker
// * SubscribeFutureDepth
// * ~~SubscribeFutureTrade~~
// * GetFutureTicker
// * GetFutureDepth
// * ~~GetFutureTrade~~
// params wit web
// var udspath = /tmp/goex.market.center //ref to https://github.com/goex-top/market_center/blob/1e1bb15c69a1da6fddbba3d506920e91f9ec7842/const.go#L35
// local variable
// var client = null
var ReqType = {
ReqType_GetSupportList: 1,
ReqType_SubscribeSpotDepth: 2,
ReqType_SubscribeSpotTicker: 3,
ReqType_SubscribeFutureDepth: 4,
ReqType_SubscribeFutureTicker: 5,
ReqType_GetSpotDepth: 6,
ReqType_GetSpotTicker: 7,
ReqType_GetFutureDepth: 8,
ReqType_GetFutureTicker: 9,
}
//---------------------------------------
function newUDSClient() {
var client = Dial('unix://'+udspath)
if (null === client) {
throw 'new usd client fail'
}
return client
}
function udsRequest(client, req) {
try {
client.write(JSON.stringify(req))
var rsp = client.read(20)
if (rsp === null) {
return null
}
var obj = JSON.parse(rsp)
if(obj.status !== 0) {
return null
}
return obj.data
}
catch(e) {
return null
}
}
function GetSupportList(client) {
var req = {type:ReqType.ReqType_GetSupportList}
var rsp = udsRequest(client, req)
if (rsp === null) {
return null
}
return rsp
}
function GetSpotDepth(client, exchangeName, pair) {
var req = {type:ReqType.ReqType_GetSpotDepth, exchange_name: exchangeName, currency_pair: pair}
var rsp = udsRequest(client, req)
if(rsp === null) {
return null
}
return {Asks:rsp.AskList, Bids:rsp.BidList, Time:rsp.UTime, Info:rsp.rsp}
}
function GetSpotTicker(client, exchangeName, pair) {
var req = {type:ReqType.ReqType_GetSpotTicker, exchange_name: exchangeName, currency_pair: pair}
var rsp = udsRequest(client, req)
if(rsp === null) {
return null
}
return {
Last:parseFloat(rsp.last),
Buy:parseFloat(rsp.buy),
Sell:parseFloat(rsp.sell),
Volume:parseFloat(rsp.vol),
Time:parseFloat(rsp.date),
High:parseFloat(rsp.high),
Low:parseFloat(rsp.low),
Info:rsp
}
}
function SubscribeSpotDepth(client, exchangeName, pair, period) {
var req = {type:ReqType.ReqType_SubscribeSpotDepth, exchange_name: exchangeName, currency_pair: pair, period: period}
var rsp = udsRequest(client, req)
return rsp
}
function SubscribeSpotTicker(client, exchangeName, pair, period) {
var req = {type:ReqType.ReqType_SubscribeSpotTicker, exchange_name: exchangeName, currency_pair: pair, period: period}
var rsp = udsRequest(client, req)
return rsp
}
function GetFutureDepth(client, exchangeName, contractType, pair) {
var req = {type:ReqType.ReqType_GetFutureDepth, exchange_name: exchangeName, contract_type: contractType, currency_pair: pair}
var rsp = udsRequest(client, req)
if(rsp === null) {
return null
}
return {Asks:rsp.AskList, Bids:rsp.BidList, Time:rsp.UTime, Info:rsp.rsp}
}
function GetFutureTicker(client, exchangeName, contractType, pair) {
var req = {type:ReqType.ReqType_GetFutureTicker, exchange_name: exchangeName, contract_type: contractType, currency_pair: pair}
var rsp = udsRequest(client, req)
if(rsp === null) {
return null
}
return {
Last:parseFloat(rsp.last),
Buy:parseFloat(rsp.buy),
Sell:parseFloat(rsp.sell),
Volume:parseFloat(rsp.vol),
Time:parseFloat(rsp.date),
High:parseFloat(rsp.high),
Low:parseFloat(rsp.low),
Info:rsp
}
}
function SubscribeFutureDepth(client, exchangeName, contractType, pair, period) {
var req = {type:ReqType.ReqType_SubscribeFutureDepth, exchange_name: exchangeName, contract_type: contractType, currency_pair: pair, period: period}
var rsp = udsRequest(client, req)
return rsp
}
function SubscribeFutureTicker(client, exchangeName, contractType, pair, period) {
var req = {type:ReqType.ReqType_SubscribeFutureTicker, exchange_name: exchangeName, contract_type: contractType, currency_pair: pair, period: period}
var rsp = udsRequest(client, req)
return rsp
}
var MarketCenterClient = (function() {
function MarketCenterClient() {
if (typeof udspath === 'undefined' || udspath === '') {
throw 'udspath not defined'
}
this.client = newUDSClient()
this.list = GetSupportList(this.client)
Log("this.list:" + this.list)
}
MarketCenterClient.prototype.GetSpotTicker = function(exchangeName, pair) {
if (typeof exchangeName === 'undefined' || exchangeName === '') {
throw 'GetSpotTicker exchangeName not defined'
}
if (typeof pair === 'undefined' || pair === '') {
throw 'GetSpotTicker pair not defined'
}
return GetSpotTicker(this.client, exchangeName, pair)
}
MarketCenterClient.prototype.GetSpotDepth = function(exchangeName, pair) {
if (typeof exchangeName === 'undefined' || exchangeName === '') {
throw 'GetSpotDepth exchangeName not defined'
}
if (typeof pair === 'undefined' || pair === '') {
throw 'GetSpotDepth pair not defined'
}
return GetSpotDepth(this.client, exchangeName, pair)
}
MarketCenterClient.prototype.SubscribeSpotDepth = function(exchangeName, pair, period) {
if(typeof(period) === 'undefined') {
period = 200
}
if (typeof exchangeName === 'undefined' || exchangeName === '') {
throw 'SubscribeSpotDepth exchangeName not defined'
}
if (typeof pair === 'undefined' || pair === '') {
throw 'SubscribeSpotDepth pair not defined'
}
var found = false
_.each(this.list, function(item) {
if (item === exchangeName) {
found = true
return false
}
})
if(!found) {
throw 'exchange ('+ exchangeName +') not support, please check it again, https://github.com/goex-top/market_center#support-exchanges'
}
return SubscribeSpotDepth(this.client, exchangeName, pair, period)
}
MarketCenterClient.prototype.SubscribeSpotTicker = function(exchangeName, pair, period) {
if(typeof(period) === 'undefined') {
period = 200
}
if (typeof exchangeName === 'undefined' || exchangeName === '') {
throw 'SubscribeSpotTicker exchangeName not defined'
}
if (typeof pair === 'undefined' || pair === '') {
throw 'SubscribeSpotTicker pair not defined'
}
var found = false
_.each(this.list, function(item) {
if (item === exchangeName) {
found = true
return false
}
})
if(!found) {
throw 'exchange ('+ exchangeName +') not support, please check it again, https://github.com/goex-top/market_center#support-exchanges'
}
return SubscribeSpotTicker(this.client, exchangeName, pair, period)
}
MarketCenterClient.prototype.GetFutureTicker = function(exchangeName, contractType, pair) {
if (typeof exchangeName === 'undefined' || exchangeName === '') {
throw 'GetFutureTicker exchangeName not defined'
}
if (typeof pair === 'undefined' || pair === '') {
throw 'GetFutureTicker pair not defined'
}
return GetFutureTicker(this.client, exchangeName, contractType, pair)
}
MarketCenterClient.prototype.GetFutureDepth = function(exchangeName, contractType, pair) {
if (typeof exchangeName === 'undefined' || exchangeName === '') {
throw 'GetFutureDepth exchangeName not defined'
}
if (typeof pair === 'undefined' || pair === '') {
throw 'GetFutureDepth pair not defined'
}
return GetFutureDepth(this.client, exchangeName, contractType, pair)
}
MarketCenterClient.prototype.SubscribeFutureDepth = function(exchangeName, contractType, pair, period) {
if(typeof(period) === 'undefined') {
period = 200
}
if (typeof exchangeName === 'undefined' || exchangeName === '') {
throw 'SubscribeFutureDepth exchangeName not defined'
}
if (typeof pair === 'undefined' || pair === '') {
throw 'SubscribeFutureDepth pair not defined'
}
var found = false
_.each(this.list, function(item) {
if (item === exchangeName) {
found = true
return false
}
})
if(!found) {
throw 'exchange ('+ exchangeName +') not support, please check it again, https://github.com/goex-top/market_center#support-exchanges'
}
return SubscribeFutureDepth(this.client, exchangeName, contractType, pair, period)
}
MarketCenterClient.prototype.SubscribeFutureTicker = function(exchangeName, contractType, pair, period) {
if(typeof(period) === 'undefined') {
period = 200
}
if (typeof exchangeName === 'undefined' || exchangeName === '') {
throw 'SubscribeFutureTicker exchangeName not defined'
}
if (typeof pair === 'undefined' || pair === '') {
throw 'SubscribeFutureTicker pair not defined'
}
var found = false
_.each(this.list, function(item) {
if (item === exchangeName) {
found = true
return false
}
})
if(!found) {
throw 'exchange ('+ exchangeName +') not support, please check it again, https://github.com/goex-top/market_center#support-exchanges'
}
return SubscribeFutureTicker(this.client, exchangeName, contractType, pair, period)
}
MarketCenterClient.prototype.GetSupportList = function() {
return GetSupportList(this.client)
}
return MarketCenterClient
})()
$.NewMarketCenterClient = function() {
return new MarketCenterClient()
}
function main() {
mcc = $.NewMarketCenterClient()
Log('support list'+mcc.GetSupportList())
mcc.SubscribeSpotDepth('binance.com', 'BTC_USDT', 200)
Sleep(1000)
Log(mcc.GetSpotDepth('binance.com', 'BTC_USDT'))
mcc.SubscribeSpotTicker('binance.com', 'BTC_USDT', 200)
Sleep(1000)
Log(mcc.GetSpotTicker('binance.com', 'BTC_USDT'))
}