Le__Serve
fonction 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)
LeserveURI
paramè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
.
serveURI
ré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
.serveURI
paramè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.
LeserveURI
paramètre est utilisé pour Https, tels quehttps://127.0.0.1:6666?tls=true&gzip=true
; vous pouvez ajoutercert_pem
etcert_key_pem
les paramètres de chargement du certificat.serveURI
vrai
chaîne
Lehandler
Le 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ètrehandler
peut 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ètrehandler
Il 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
, 3
Il est passé à l'appel__Serve()
fonction correspondent aux paramètresa
, b
, c
passé 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
Websocket
Vous pouvez définir une branche de routage dans le chemin et concevoir le code de mise en œuvre pourWebsocket
Vous pouvez consulter l'exemple de code dans cette section.La fonction de rappel passée par le paramètrehandler
Il reçoit unctx
Paramètre.ctx
paramètre est un objet contextuel utilisé pour obtenir et écrire des données, avec les méthodes suivantes:
HTTP/1.1
, tcp
.http://127.0.0.1:8088?num=123
, et la fonction de traitement de rappel passée par le paramètrehandler
rendements"123"
quand?ctx.query("num")
est appelé.User-Agent
dans les titres de la demande en cours:ctx.header("User-Agent")
.GET
, POST
, etc.ctx
objet 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.read
Cette méthode n'est pas prise en charge dans le protocole HTTP ordinaire.timeout_ms
en millisecondes.JSON.stringify()
pour encoder l'objet JSON dans une chaîne de caractères et l'écrire.WebSocket
protocole, 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