संसाधन लोड हो रहा है... लोड करना...

__सेवा करें

..__Servefunction का उपयोग Http सेवा, TCP सेवा और Websocket सेवा (Http प्रोटोकॉल पर आधारित) बनाने के लिए किया जाता है।

एक स्ट्रिंग लौटाता है जो बनाई गई सेवा के आईपी पते और पोर्ट को रिकॉर्ड करता है. उदाहरण के लिएः127.0.0.1:8088, [::]:8089.

स्ट्रिंग

__Serve ((serveURI, हैंडलर) __Serve ((serveURI, हैंडलर,...args)

..serveURIपैरामीटर का उपयोग प्रोटोकॉल, आईपी पते, पोर्ट और सेवा बाध्यता की अन्य सेटिंग्स को कॉन्फ़िगर करने के लिए किया जाता है, जैसे किhttp://0.0.0.0:8088?gzip=true, यानी,http://:8088?gzip=true.

  • टीसीपी प्रोटोकॉलserveURIपैरामीटर सेटिंग, जैसेtcp://127.0.0.1:6666?tls=true; आप प्रमाणपत्र और निजी कुंजी जोड़ सकते हैं, जैसे किtls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • एचटीपी प्रोटोकॉलserveURIपैरामीटर सेटिंग्स, जैसेhttp://127.0.0.1:6666?gzip=true; आप संपीड़न सेटिंग्स सेट कर सकते हैंःgzip=true. दserveURIपैरामीटर Https के लिए प्रयोग किया जाता है, जैसे किhttps://127.0.0.1:6666?tls=true&gzip=true; आप जोड़ सकते हैंcert_pemऔरcert_key_pemप्रमाणपत्र को लोड करने के लिए पैरामीटर।

serveURI सच स्ट्रिंग दhandlerपैरामीटर का प्रयोग रूटिंग प्रोसेसिंग फंक्शन (Http प्रोटोकॉल), मैसेज प्रोसेसिंग फंक्शन (TCP प्रोटोकॉल), और स्ट्रीम प्रोसेसिंग फंक्शन (वेबसोकेट) में पास करने के लिए किया जाता है। पैरामीटर द्वारा पास किया गया कॉलबैक फ़ंक्शनhandlerकई मापदंडों को परिभाषित कर सकते हैं, पहला मापदंड ctx ऑब्जेक्ट (संदर्भ ऑब्जेक्ट) है।

संचालक सच कार्य कॉलबैक फ़ंक्शन का वास्तविक पैरामीटर पैरामीटर के रूप में पारित कियाhandler. कई मापदंड हो सकते हैंargउदाहरण के लिए:

__Serve("http://:8088", function(ctx, a, b, c) {
    Log(`ctx.host():`, ctx.host(), ", a=", a, ", b=", b, ", c=", c)
}, 1, 2, 3)

मापदंड1, 2, 3में पारित किया जब कॉल__Serve()समारोह पैरामीटर के अनुरूपa, b, cकॉलबैक फ़ंक्शन में पारित किया।

आर्ग झूठी string, number, bool, object, array, function, null value और सिस्टम द्वारा समर्थित अन्य प्रकार

function main() {
    let httpServer = __Serve("http://:8088?gzip=true", function (ctx) {
        Log("http connect from: ", ctx.remoteAddr(), "->", ctx.localAddr())
        let path = ctx.path()
        if (path == "/") {
            ctx.write(JSON.stringify({
                path: ctx.path(),
                method: ctx.method(),
                headers: ctx.headers(),
                cookie: ctx.header("Cookie"),
                remote: ctx.remoteAddr(),
                query: ctx.rawQuery()
            }))
        } else if (path == "/tickers") {
            let ret = exchange.GetTickers()
            if (!ret) {
                ctx.setStatus(500)
                ctx.write(GetLastError())
            } else {
                ctx.write(JSON.stringify(ret))
            }
        } else if (path == "/wss") {
            if (ctx.upgrade("websocket")) { // upgrade to websocket
                while (true) {
                    let r = ctx.read(10)
                    if (r == "") {
                        break
                    } else if (r) {
                        if (r == "ticker") {
                            ctx.write(JSON.stringify(exchange.GetTicker()))
                        } else {
                            ctx.write("not support")
                        }
                    }
                }
                Log("websocket closed", ctx.remoteAddr())
            }
        } else {
            ctx.setStatus(404)
        }
    })
    let echoServer = __Serve("tcp://:8089", function (ctx) {
        Log("tcp connect from: ", ctx.remoteAddr(), "->", ctx.localAddr())
        while (true) {
            let d = ctx.read()
            if (!d) {
                break
            }
            ctx.write(d)
        }
        Log("connect closed")
    })
    Log("http serve on", httpServer, "tcp serve on", echoServer)
    
    for (var i = 0; i < 5; i++) {
        if (i == 2) {
            // test Http
            var retHttp = HttpQuery("http://127.0.0.1:8088?num=123&limit=100", {"debug": true})
            Log("retHttp:", retHttp)
        } else if (i == 3) {
            // test TCP
            var tcpConn = Dial("tcp://127.0.0.1:8089")
            tcpConn.write("Hello TCP Server")
            var retTCP = tcpConn.read()
            Log("retTCP:", retTCP)
        } else if (i == 4) {
            // test Websocket
            var wsConn = Dial("ws://127.0.0.1:8088/wss|compress=gzip")
            wsConn.write("ticker")
            var retWS = wsConn.read(1000)
            Log("retWS:", retWS)
            // no depth
            wsConn.write("depth")
            retWS = wsConn.read(1000)
            Log("retWS:", retWS)
        }
        Sleep(1000)
    }
}
# Unsupported
// Unsupported
  • यह फ़ंक्शन केवल जावास्क्रिप्ट भाषा रणनीतियों का समर्थन करता है.
  • सेवा थ्रेड वैश्विक दायरे से अलग है, इसलिए यह बंद या बाहरी चर, कस्टम फ़ंक्शन, आदि के संदर्भ का समर्थन नहीं करता है; हालांकि, यह सभी प्लेटफ़ॉर्म एपीआई फ़ंक्शन को कॉल कर सकता है।
  • ..Websocketसेवा HTTP प्रोटोकॉल के आधार पर लागू किया जाता है. आप पथ में एक रूटिंग शाखा सेट कर सकते हैं और के लिए कार्यान्वयन कोड डिजाइनWebsocketआप इस अनुभाग में नमूने कोड का संदर्भ ले सकते हैं।

पैरामीटर द्वारा पास किया गया कॉलबैक फ़ंक्शनhandlerप्राप्त करता हैctxपैरामीटर।ctxपैरामीटर एक संदर्भ वस्तु है जिसका उपयोग डेटा प्राप्त करने और लिखने के लिए किया जाता है, निम्नलिखित विधियों के साथः

  • ctx.proto (() Http/TCP प्रोटोकॉल पर लागू, कॉल करने पर प्रोटोकॉल का नाम लौटाता है। उदाहरण के लिएःHTTP/1.1, tcp.
  • ctx.host() एचटीटीपी प्रोटोकॉल पर लागू, यह आईपी पते और बंदरगाह को बुलाते समय मेजबान जानकारी लौटाता है।
  • ctx.path (() Http प्रोटोकॉल पर लागू किया जाता है, जब बुलाया जाता है तो अनुरोध पथ लौटाता है.
  • ctx.query(key) HTTP प्रोटोकॉल पर लागू किया जाता है, अनुरोध में क्वेरी में कुंजी के अनुरूप मान लौटाता है जब बुलाया जाता है। उदाहरण के लिए, भेजा गया अनुरोध हैःhttp://127.0.0.1:8088?num=123, और पैरामीटर द्वारा पारित कॉलबैक प्रसंस्करण समारोहhandlerरिटर्न"123"कबctx.query("num")कहा जाता है।
  • ctx.rawQuery() Http प्रोटोकॉल पर लागू, जब बुलाया जाता है, तो अनुरोध में मूल क्वेरी (Http अनुरोध की क्वेरी) लौटाता है।
  • ctx.headers (() Http प्रोटोकॉल पर लागू किया जाता है, और अनुरोध में अनुरोध हेडर जानकारी लौटाता है जब बुलाया जाता है.
  • ctx.header ((कुंजी) HTTP प्रोटोकॉल पर लागू, यह कहा जाता है जब निर्दिष्ट अनुरोध हेडर में एक कुंजी का मूल्य देता है. उदाहरण के लिए, प्राप्तUser-Agentवर्तमान अनुरोध के शीर्षकों मेंःctx.header("User-Agent").
  • ctx.method (() Http प्रोटोकॉल पर लागू किया जाता है, जब बुलाया जाता है तो अनुरोध विधि लौटाता है, जैसे किGET, POSTआदि।
  • ctx.body ((() Http प्रोटोकॉल के POST अनुरोध पर लागू किया जाता है, और बुलाए जाने पर अनुरोध का शरीर लौटाता है.
  • ctx.setHeader ((कुंजी, मान) उत्तर संदेश की अनुरोध हेडर जानकारी सेट करने के लिए HTTP प्रोटोकॉल पर लागू किया गया।
  • ctx.setStatus (कोड) Http प्रोटोकॉल पर लागू, Http संदेश स्थिति कोड सेट करें. आमतौर पर, Http स्थिति कोड रूटिंग शाखा के अंत में सेट किया जाता है. डिफ़ॉल्ट मान 200 है.
  • ctx.remoteAddr() Http/TCP प्रोटोकॉल पर लागू, रिमोट क्लाइंट का पता और अनुरोध में पोर्ट वापस करता है जब बुलाया जाता है.
  • ctx.localAddr() Http/TCP प्रोटोकॉल पर लागू, सेवा के स्थानीय पते और बंदरगाह को वापस करता है जब बुलाया जाता है।
  • ctx.upgrade ((वेबसोकेट) HTTP प्रोटोकॉल के आधार पर वेबसॉकेट प्रोटोकॉल कार्यान्वयन के लिए लागू किया, स्विचिंगctxवेबसॉकेट प्रोटोकॉल के लिए संदर्भ वस्तु; यदि स्विच सफल होता है तो एक बूलियन मान (सही) और यदि यह विफल होता है तो एक बूलियन मान (गलत) लौटाता है।
  • ctx.read ((timeout_ms) HTTP प्रोटोकॉल पर आधारित वेबसॉकेट प्रोटोकॉल कार्यान्वयन/टीसीपी प्रोटोकॉल पर लागू, वेबसॉकेट कनेक्शन और टीसीपी कनेक्शन का डेटा पढ़ता है।readविधि साधारण HTTP प्रोटोकॉल में समर्थित नहीं है. आप समय सीमा पैरामीटर निर्दिष्ट कर सकते हैंtimeout_msमिलीसेकंड में।
  • ctx.write ((s) HTTP/TCP प्रोटोकॉल के लिए लागू, स्ट्रिंग डेटा लिखने के लिए इस्तेमाल किया. आप उपयोग कर सकते हैंJSON.stringify()JSON ऑब्जेक्ट को एक स्ट्रिंग में एन्कोड करने के लिए और फिर इसे लिखने के लिए.WebSocketप्रोटोकॉल, आप क्लाइंट को एन्कोडेड स्ट्रिंग पास करने के लिए इस विधि का उपयोग कर सकते हैं.

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}

इवेंट लूप _G