Les ressources ont été chargées... Je charge...

__ Servir

Le__Servefonction est utilisée pour créer le service Http, le service TCP et le service Websocket (basé sur le protocole Http).

Renvoie une chaîne qui enregistre l'adresse IP et le port du service créé.127.0.0.1:8088, [::]:8089.

une chaîne

__Serve (serveURI, traitement) __Service (serveURI, gestionnaire,... args)

LeserveURIparamètre est utilisé pour configurer le protocole, l'adresse IP, le port et d'autres paramètres de la liaison de service, tels quehttp://0.0.0.0:8088?gzip=true, c'est à dire,http://:8088?gzip=true.

  • Protocole TCPserveURIréglage des paramètres tels quetcp://127.0.0.1:6666?tls=true; vous pouvez ajouter des certificats et des clés privées, commetls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • Protocole HTTPserveURIparamètres, tels quehttp://127.0.0.1:6666?gzip=true; vous pouvez définir les paramètres de compression:gzip=true- Je ne sais pas. LeserveURIparamètre est utilisé pour Https, tels quehttps://127.0.0.1:6666?tls=true&gzip=true; vous pouvez ajoutercert_pemetcert_key_pemles paramètres de chargement du certificat.

serveURI vrai chaîne LehandlerLe paramètre est utilisé pour passer dans la fonction de traitement du routage (protocole HTTP), la fonction de traitement des messages (protocole TCP) et la fonction de traitement du flux (Websocket). La fonction de rappel passée par le paramètrehandlerpeut définir plusieurs paramètres, le premier paramètre étant l'objet ctx (objet contextuel).

le gestionnaire vrai fonction Le paramètre réel de la fonction de rappel passé comme paramètrehandlerIl peut y avoir plusieurs paramètresarg, par exemple:

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

Les paramètres1, 2, 3Il est passé à l'appel__Serve()fonction correspondent aux paramètresa, b, cpassé dans la fonction de rappel.

arg faux chaîne, nombre, bool, objet, tableau, fonction, valeur nulle et autres types pris en charge par le système

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
  • Cette fonction prend en charge uniquement les stratégies du langage JavaScript.
  • Le fil de service est isolé de la portée globale, il ne prend donc pas en charge les clôtures ou les références à des variables externes, des fonctions personnalisées, etc.; cependant, il peut appeler toutes les fonctions API de la plateforme.
  • LeWebsocketVous pouvez définir une branche de routage dans le chemin et concevoir le code de mise en œuvre pourWebsocketVous pouvez consulter l'exemple de code dans cette section.

La fonction de rappel passée par le paramètrehandlerIl reçoit unctxParamètre.ctxparamètre est un objet contextuel utilisé pour obtenir et écrire des données, avec les méthodes suivantes:

  • Je suis désolé. Appliqué au protocole Http/TCP, renvoie le nom du protocole lorsqu'il est appelé.HTTP/1.1, tcp.
  • ctx.host(l) Appliqué au protocole Http, il renvoie des informations sur l'hôte lorsqu'il est appelé adresse IP et port.
  • Ctx.path (en anglais) Appliqué au protocole Http, renvoie le chemin de demande lorsqu'il est appelé.
  • Ctx.query (clé) Appliqué au protocole Http, renvoie la valeur correspondant à la clé de la requête dans la requête lorsqu'elle est appelée.http://127.0.0.1:8088?num=123, et la fonction de traitement de rappel passée par le paramètrehandlerrendements"123"quand?ctx.query("num")est appelé.
  • ctx.rawQuery (en anglais seulement) Appliqué au protocole Http, lorsqu'il est appelé, renvoie la requête d'origine dans la requête (la requête de la requête Http).
  • Les titres ctx.header Appliqué au protocole Http, et renvoie l'information de l'en-tête de demande dans la demande lorsqu'elle est appelée.
  • Ctx.titre (clé) Appliqué au protocole Http, il renvoie la valeur d'une clé dans l'en-tête de demande spécifié lorsqu'il est appelé.User-Agentdans les titres de la demande en cours:ctx.header("User-Agent").
  • méthode ctx ()) Appliqué au protocole Http, renvoie la méthode de demande lorsqu'elle est appelée, telle queGET, POST, etc.
  • Ctx. corps Appliqué à la requête POST du protocole HTTP, et renvoie le corps de la requête lorsqu'il est appelé.
  • ctx.setHeader (clé, valeur) Appliqué au protocole Http pour définir les informations de l'en-tête de demande du message de réponse.
  • ctx.setStatus (code) Appliqué au protocole HTTP, définit le code d'état du message HTTP. Habituellement, le code d'état HTTP est défini à la fin de la branche de routage. La valeur par défaut est 200.
  • Ctx.remoteAddr (en anglais) Appliqué au protocole Http/TCP, renvoie l'adresse du client distant et le port dans la demande lorsqu'il est appelé.
  • Ctx.localAddr (() Appliqué au protocole HTTP/TCP, renvoie l'adresse locale et le port du service lorsqu'il est appelé.
  • Ctx.upgrade ((websocket) est un logiciel de connexion pour les téléphones mobiles. Appliqué à la mise en œuvre du protocole Websocket basé sur le protocole Http, en basculant lectxobjet de contexte au protocole Websocket; renvoie une valeur booléenne (true) si le commutateur est réussi, et une valeur booléenne (fausse) si elle échoue.
  • Ctx.read ((timeout_ms) Appliqué à la mise en œuvre du protocole Websocket / protocole TCP basé sur le protocole Http, lit les données de la connexion Websocket et la connexion TCP.readCette méthode n'est pas prise en charge dans le protocole HTTP ordinaire.timeout_msen millisecondes.
  • Ctx. écrire (s) Appliqué au protocole HTTP/TCP, utilisé pour écrire des données de chaîne.JSON.stringify()pour encoder l'objet JSON dans une chaîne de caractères et l'écrire.WebSocketprotocole, vous pouvez utiliser cette méthode pour passer la chaîne codée au client.

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go} Vous pouvez utiliser le nom de domaine de l'utilisateur.

La boucle d'événement _G