Die Ressourcen sind geladen. Beförderung...

__Dienen

Die__ServeFunktion wird verwendet, um Http-Dienst, TCP-Dienst und Websocket-Dienst (basierend auf Http-Protokoll) zu erstellen.

Gibt eine Zeichenfolge zurück, die die IP-Adresse und den Port des erstellten Dienstes aufzeichnet.127.0.0.1:8088, [::]:8089.

String

__Serve (ServeURI, Handler) __Serve ((serveURI, Handler,...args)

DieserveURIParameter wird verwendet, um das Protokoll, die IP-Adresse, den Port und andere Einstellungen der Dienstbindung zu konfigurieren, wiehttp://0.0.0.0:8088?gzip=true, d. h.http://:8088?gzip=true.

  • TCP-ProtokollserveURIEinstellung von Parametern wietcp://127.0.0.1:6666?tls=trueSie können z. B. Zertifikate und private Schlüssel hinzufügentls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • HTTP-ProtokollserveURIEinstellungen von Parametern wiehttp://127.0.0.1:6666?gzip=true; Sie können Komprimierungseinstellungen einstellen:gzip=true- Ich weiß. DieserveURIParameter wird für Https verwendet, wiehttps://127.0.0.1:6666?tls=true&gzip=true; Sie können hinzufügencert_pemundcert_key_pemParameter zum Laden des Zertifikats.

ServiceURI wahr String DiehandlerDer Parameter wird verwendet, um in der Routing-Verarbeitungsfunktion (Http-Protokoll), der Nachrichtenverarbeitungsfunktion (TCP-Protokoll) und der Stream-Verarbeitungsfunktion (Websocket) zu übergeben. Die von dem Parameter übermittelte Rückruffunktionhandlerkann mehrere Parameter definieren, der erste Parameter ist das ctx-Objekt (Kontextobjekt).

Handler wahr Funktion Der tatsächliche Parameter der Rückruffunktion wird als Parameter übergebenhandlerEs kann mehrere Parameter geben.arg, zum Beispiel:

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

Die Parameter1, 2, 3Sie ist bei der Anrufung der__Serve()Funktion entsprechen den Parameterna, b, cin der Rückruffunktion übergeben.

Arg falsche String, Zahl, bool, Objekt, Array, Funktion, Nullwert und andere vom System unterstützte Typen

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
  • Diese Funktion unterstützt nur JavaScript-Sprachstrategien.
  • Der Service-Thread ist vom globalen Umfang isoliert, so dass er keine Schließungen oder Verweise auf externe Variablen, benutzerdefinierte Funktionen usw. unterstützt; er kann jedoch alle Plattform-API-Funktionen aufrufen.
  • DieWebsocketSie können einen Routing-Zweig in den Pfad setzen und den Implementierungscode fürWebsocketSie können sich auf den Mustercode in diesem Abschnitt beziehen.

Die von dem Parameter übermittelte Rückruffunktionhandlererhält einectxDiectxParameter ist ein Kontextobjekt, das zur Erfassung und Schreibung von Daten mit folgenden Methoden verwendet wird:

  • ctx.proto ((() Wird auf das Http/TCP-Protokoll angewendet, gibt den Protokollnamen zurück, wenn er aufgerufen wird.HTTP/1.1, tcp.
  • ctx.host(') Anwendet auf das HTTP-Protokoll, gibt es Hostinformationen zurück, wenn IP-Adresse und Port aufgerufen werden.
  • ctx.path ((() Wird auf das HTTP-Protokoll angewendet, gibt er den Anforderungspfad zurück, wenn er aufgerufen wird.
  • ctx.query (Schlüssel) Wird auf das HTTP-Protokoll angewendet, gibt den Wert zurück, der dem Schlüssel in der Abfrage in der Anfrage entspricht, wenn sie aufgerufen wird.http://127.0.0.1:8088?num=123, und die von dem Parameter übermittelte Funktion für die RückrufverarbeitunghandlerErträge"123"Wann?ctx.query("num")ist genannt.
  • ctx.rawQuery() Wird auf das Http-Protokoll angewendet, wird bei Aufruf die ursprüngliche Abfrage in der Anfrage zurückgegeben (die Abfrage der Http-Anfrage).
  • ctx.header (n) Wird auf das Http-Protokoll angewendet und gibt bei Aufruf die Anforderungsheader-Informationen in der Anfrage zurück.
  • ctx.header (Schlüssel) Wird auf das HTTP-Protokoll angewendet, gibt es den Wert eines Schlüssels in der angegebenen Anforderungskopfzeile zurück, wenn er aufgerufen wird.User-Agentin den Überschriften des vorliegenden Antrags:ctx.header("User-Agent").
  • ctx.Methode (() Wird auf das Http-Protokoll angewendet, gibt die Anforderungsmethode zurück, wenn sie aufgerufen wird, wie z. B.GET, POST, usw.
  • ctx.body (siehe unten) Wird auf die POST-Anfrage des HTTP-Protokolls angewendet und gibt den Körper der Anfrage zurück, wenn er aufgerufen wird.
  • ctx.setHeader (Schlüssel, Wert) Wird auf das HTTP-Protokoll angewendet, um die Anfrageheader-Informationen der Antwortnachricht festzulegen.
  • ctx.setStatus (code) Für das Http-Protokoll wird der Statuscode der Http-Nachricht gesetzt. Normalerweise wird der Statuscode am Ende des Routing-Branches gesetzt. Der Standardwert ist 200.
  • ctx.remoteAddr() Wird auf das HTTP/TCP-Protokoll angewendet, gibt die Adresse des Remote-Clients und den Port in der Anfrage zurück, wenn er aufgerufen wird.
  • ctx.localAddr() Wird auf das HTTP/TCP-Protokoll angewendet, gibt die lokale Adresse und den Port des Dienstes zurück, wenn er aufgerufen wird.
  • ctx.upgrade ((Websocket) Wird auf die Implementierung des Websocket-Protokolls basierend auf dem Http-Protokoll angewendet, wird diectxKontextobjekt zum Websocket-Protokoll; Gibt einen Boolean-Wert (true) zurück, wenn der Switch erfolgreich ist, und einen Boolean-Wert (false), wenn er fehlschlägt.
  • ctx.read ((timeout_ms) Wird auf Websocket-Protokollimplementierung/TCP-Protokoll basierend auf HTTP-Protokoll angewendet, liest Daten von Websocket-Verbindung und TCP-Verbindung.readSie können den Timeout-Parameter angeben.timeout_msin Millisekunden.
  • ctx.write (s) Wird auf das HTTP/TCP-Protokoll angewendet, verwendet, um String-Daten zu schreiben.JSON.stringify()Das JSON-Objekt in eine Zeichenkette zu kodieren und dann zu schreiben.WebSocketProtokoll, Sie können diese Methode verwenden, um die verschlüsselte Zeichenfolge an den Client weiterzugeben.

Das ist eine sehr schwierige Aufgabe.

EventLoop _G