Die__Serve
Funktion 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)
DieserveURI
Parameter 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
.
serveURI
Einstellung von Parametern wietcp://127.0.0.1:6666?tls=true
Sie können z. B. Zertifikate und private Schlüssel hinzufügentls=true&cert_pem=xxxx&cert_key_pem=xxxx
.serveURI
Einstellungen von Parametern wiehttp://127.0.0.1:6666?gzip=true
; Sie können Komprimierungseinstellungen einstellen:gzip=true
- Ich weiß.
DieserveURI
Parameter wird für Https verwendet, wiehttps://127.0.0.1:6666?tls=true&gzip=true
; Sie können hinzufügencert_pem
undcert_key_pem
Parameter zum Laden des Zertifikats.ServiceURI
wahr
String
Diehandler
Der 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ückruffunktionhandler
kann mehrere Parameter definieren, der erste Parameter ist das ctx-Objekt (Kontextobjekt).
Handler
wahr
Funktion
Der tatsächliche Parameter der Rückruffunktion wird als Parameter übergebenhandler
Es 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
, 3
Sie ist bei der Anrufung der__Serve()
Funktion entsprechen den Parameterna
, b
, c
in 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
Websocket
Sie können einen Routing-Zweig in den Pfad setzen und den Implementierungscode fürWebsocket
Sie können sich auf den Mustercode in diesem Abschnitt beziehen.Die von dem Parameter übermittelte Rückruffunktionhandler
erhält einectx
Diectx
Parameter ist ein Kontextobjekt, das zur Erfassung und Schreibung von Daten mit folgenden Methoden verwendet wird:
HTTP/1.1
, tcp
.http://127.0.0.1:8088?num=123
, und die von dem Parameter übermittelte Funktion für die Rückrufverarbeitunghandler
Erträge"123"
Wann?ctx.query("num")
ist genannt.User-Agent
in den Überschriften des vorliegenden Antrags:ctx.header("User-Agent")
.GET
, POST
, usw.ctx
Kontextobjekt zum Websocket-Protokoll; Gibt einen Boolean-Wert (true) zurück, wenn der Switch erfolgreich ist, und einen Boolean-Wert (false), wenn er fehlschlägt.read
Sie können den Timeout-Parameter angeben.timeout_ms
in Millisekunden.JSON.stringify()
Das JSON-Objekt in eine Zeichenkette zu kodieren und dann zu schreiben.WebSocket
Protokoll, Sie können diese Methode verwenden, um die verschlüsselte Zeichenfolge an den Client weiterzugeben.Das ist eine sehr schwierige Aufgabe.
EventLoop _G