El__Serve
La función se utiliza para crear el servicio HTTP, el servicio TCP y el servicio Websocket (basado en el protocolo HTTP).
Devuelve una cadena que registra la dirección IP y el puerto del servicio creado. Por ejemplo:127.0.0.1:8088
, [::]:8089
.
la cuerda
__Servir (servirURI, manejador de datos) __Service ((serveURI, manejador,...args)
ElserveURI
El parámetro se utiliza para configurar el protocolo, dirección IP, puerto y otras configuraciones del servicio de vinculación, tales comohttp://0.0.0.0:8088?gzip=true
, es decir,http://:8088?gzip=true
.
serveURI
configuración de parámetros, comotcp://127.0.0.1:6666?tls=true
; puede añadir certificados y claves privadas, tales comotls=true&cert_pem=xxxx&cert_key_pem=xxxx
.serveURI
configuración de parámetros, tales comohttp://127.0.0.1:6666?gzip=true
; puede configurar la configuración de compresión:gzip=true
- ¿ Por qué?
ElserveURI
El parámetro se utiliza para Https, comohttps://127.0.0.1:6666?tls=true&gzip=true
; puede añadircert_pem
ycert_key_pem
los parámetros para cargar el certificado.servicioURI
verdadero
la cuerda
Elhandler
El parámetro se utiliza para pasar en la función de procesamiento de enrutamiento (protocolo HTTP), la función de procesamiento de mensajes (protocolo TCP) y la función de procesamiento de flujo (Websocket).
La función de devolución de llamada transmitida por el parámetrohandler
puede definir múltiples parámetros, el primer parámetro es el objeto ctx (objeto de contexto).
manipuladora
verdadero
Función
El parámetro real de la función de devolución de llamada pasado como el parámetrohandler
Puede haber varios parámetros.arg
, por ejemplo:
__Serve("http://:8088", function(ctx, a, b, c) {
Log(`ctx.host():`, ctx.host(), ", a=", a, ", b=", b, ", c=", c)
}, 1, 2, 3)
Los parámetros1
, 2
, 3
En el momento de llamar a la__Serve()
función corresponde a los parámetrosa
, b
, c
Pasado en la función de devolución de llamada.
el falsos cadena, número, bool, objeto, matriz, función, valor nulo y otros tipos compatibles con el sistema
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
el servicio se implementa basado en el protocolo Http. Puede establecer una rama de enrutamiento en la ruta y diseñar el código de implementación paraWebsocket
Se puede consultar el código de muestra en esta sección.La función de devolución de llamada transmitida por el parámetrohandler
recibe unactx
el parámetro.ctx
Parámetro es un objeto de contexto utilizado para obtener y escribir datos, con los siguientes métodos:
HTTP/1.1
, tcp
.http://127.0.0.1:8088?num=123
, y la función de procesamiento de devoluciones de llamada transmitida por el parámetrohandler
las devoluciones"123"
¿Cuándo?ctx.query("num")
se llama.User-Agent
en los encabezados de la solicitud actual:ctx.header("User-Agent")
.GET
, POST
, etc.ctx
objeto de contexto al protocolo Websocket; devolviendo un valor booleano (verdadero) si el cambio es exitoso, y un valor booleano (falso) si falla.read
método no es compatible en el protocolo HTTP ordinario. Puede especificar el parámetro de tiempo de esperatimeout_ms
en milisegundos.JSON.stringify()
para codificar el objeto JSON en una cadena y luego escribirlo.WebSocket
Protocolo, se puede utilizar este método para pasar la cadena codificada al cliente.En el caso de las aplicaciones que se utilicen para la búsqueda de datos, el número de páginas que se utilicen para la búsqueda de datos es el número de páginas que se utilicen para la búsqueda de datos.
Loop de eventos _G