घटनाओं के लिए सुनने के लिए, यह वापस आता है जब कोई हैWebSocket
पठनीय डेटा या समवर्ती कार्य, जैसेexchange.Go()
, HttpQuery_Go()
, आदि पूर्ण हो गए हैं।
यदि लौटी वस्तु शून्य मूल्य नहीं है, तोEvent
रिटर्न सामग्री में निहित घटना ट्रिगर प्रकार है। उदाहरण के लिए निम्न रिटर्न मान संरचनाः
{"Seq":1,"Event":"Exchange_GetTrades","ThreadId":0,"Index":3,"Nano":1682068771309583400}
वस्तु
इवेंट लूप घटना लूप (टाइमआउट)
पैरामीटरtimeout
मिलीसेकंड में टाइमआउट सेटिंग है। पैरामीटरtimeout
यदि यह 0 पर सेट किया गया है तो वापस आने से पहले किसी घटना के होने की प्रतीक्षा करता है, यदि यह 0 से अधिक है, तो यह घटना को टाइमआउट की प्रतीक्षा करने के लिए सेट करता है, और यदि यह 0 से कम है तो सबसे हालिया घटना को तुरंत लौटाता है।
टाइमआउट
झूठी
संख्या
function main() {
var routine_getTicker = exchange.Go("GetTicker")
var routine_getDepth = exchange.Go("GetDepth")
var routine_getTrades = exchange.Go("GetTrades")
// Sleep(2000), if the Sleep statement is used here, it will cause the subsequent EventLoop function to miss the previous events, because after waiting for 2 seconds, the concurrent function has received the data, and the subsequent EventLoop listening mechanism started, it misses these events.
// These events will not be missed unless EventLoop(-1) is called at the beginning of the first line of code to first initialize the EventLoop's listening mechanism.
// Log("GetDepth:", routine_getDepth.wait()) If the wait function is called in advance to retrieve the result of a concurrent call to the GetDepth function, the event that the GetDepth function receives the result of the request will not be returned in the EventLoop function.
var ts1 = new Date().getTime()
var ret1 = EventLoop(0)
var ts2 = new Date().getTime()
var ret2 = EventLoop(0)
var ts3 = new Date().getTime()
var ret3 = EventLoop(0)
Log("The first concurrent task completed was:", _D(ts1), ret1)
Log("The second concurrent task completed was:", _D(ts2), ret2)
Log("The third concurrent task completed was:", _D(ts3), ret3)
Log("GetTicker:", routine_getTicker.wait())
Log("GetDepth:", routine_getDepth.wait())
Log("GetTrades:", routine_getTrades.wait())
}
import time
def main():
routine_getTicker = exchange.Go("GetTicker")
routine_getDepth = exchange.Go("GetDepth")
routine_getTrades = exchange.Go("GetTrades")
ts1 = time.time()
ret1 = EventLoop(0)
ts2 = time.time()
ret2 = EventLoop(0)
ts3 = time.time()
ret3 = EventLoop(0)
Log("The first concurrent task completed was:", _D(ts1), ret1)
Log("The second concurrent task completed was:", _D(ts2), ret2)
Log("The third concurrent task completed was:", _D(ts3), ret3)
Log("GetTicker:", routine_getTicker.wait())
Log("GetDepth:", routine_getDepth.wait())
Log("GetTrades:", routine_getTrades.wait())
void main() {
auto routine_getTicker = exchange.Go("GetTicker");
auto routine_getDepth = exchange.Go("GetDepth");
auto routine_getTrades = exchange.Go("GetTrades");
auto ts1 = Unix() * 1000;
auto ret1 = EventLoop(0);
auto ts2 = Unix() * 1000;
auto ret2 = EventLoop(0);
auto ts3 = Unix() * 1000;
auto ret3 = EventLoop(0);
Log("The first concurrent task completed was:", _D(ts1), ret1);
Log("The second concurrent task completed was:", _D(ts2), ret2);
Log("The third concurrent task completed was:", _D(ts3), ret3);
Ticker ticker;
Depth depth;
Trades trades;
routine_getTicker.wait(ticker);
routine_getDepth.wait(depth);
routine_getTrades.wait(trades);
Log("GetTicker:", ticker);
Log("GetDepth:", depth);
Log("GetTrades:", trades);
}
पहली कॉलEventLoop()
कोड में फ़ंक्शन उस सुनी घटना के लिए तंत्र आरंभ करता है, और अगर पहलीEventLoop()
कॉल घटना callback के बाद शुरू होता है, यह पिछली घटनाओं को याद करेगा. अंतर्निहित प्रणाली एक कतार संरचना को लपेटती है जो अधिकतम 500 घटना callbacks कैश करती है. यदिEventLoop()
समारोह को समय में नहीं बुलाया जाता है उन्हें कार्यक्रम निष्पादन के दौरान बाहर ले जाने के लिए, बाद में घटना 500 कैश के बाहर callbacks खो जाएगा.EventLoop()
कार्य अंतर्निहित प्रणाली वेबसॉकेट के कैश कतार या समवर्ती कार्यों के कैश को प्रभावित नहीं करता है जैसे किexchange.Go()
. इन कैश के लिए, अभी भी डेटा पुनर्प्राप्त करने के लिए संबंधित विधियों का उपयोग करना आवश्यक है।EventLoop()
फ़ंक्शन के लिए डेटा है कि पहले प्राप्त किया गया हैEventLoop()
मुख्य उद्देश्यEventLoop()
कार्य रणनीति परत को सूचित करना है कि नए नेटवर्क डेटा को अंतर्निहित प्रणाली द्वारा प्राप्त किया गया है। पूरी रणनीति घटनाओं से प्रेरित है।EventLoop()
फ़ंक्शन एक घटना लौटाता है, बस सभी डेटा स्रोतों को पार करता है. उदाहरण के लिए, वेबसॉकेट कनेक्शन, द्वारा बनाई गई वस्तुओंexchange.Go()
डेटा प्राप्त करने की कोशिश करें।EventLoop()
फ़ंक्शन केवल लाइव ट्रेडिंग का समर्थन करता है।
मुख्य फ़ंक्शन से बुलाए जाने पर मुख्य थ्रेड में घटनाओं के लिए सुनेंmain()
. में लिखी रणनीतियों मेंJavaScript
भाषा,__Thread()
फ़ंक्शन एक थ्रेड बनाता है, जिसे वर्तमान थ्रेड में घटनाओं के लिए सुनने के लिए थ्रेड
{@fun/Global/Dial Dial}, {@fun/Trade/exchange.Go exchange.Go}, {@fun/Global/HttpQuery_Go HttpQuery_Go}
UUID __सेवा करें