En la carga de los recursos... Cargando...

Se sirve

El__ServeLa 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)

ElserveURIEl 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.

  • Protocolo TCPserveURIconfiguració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.
  • El protocolo HTTPserveURIconfiguració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é? ElserveURIEl parámetro se utiliza para Https, comohttps://127.0.0.1:6666?tls=true&gzip=true; puede añadircert_pemycert_key_pemlos parámetros para cargar el certificado.

servicioURI verdadero la cuerda ElhandlerEl 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ámetrohandlerpuede 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ámetrohandlerPuede 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, 3En el momento de llamar a la__Serve()función corresponde a los parámetrosa, b, cPasado 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
  • Esta función soporta sólo las estrategias del lenguaje JavaScript.
  • El hilo de servicio está aislado del alcance global, por lo que no admite cierres o referencias a variables externas, funciones personalizadas, etc.; sin embargo, puede llamar a todas las funciones de la API de la plataforma.
  • ElWebsocketel 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 paraWebsocketSe puede consultar el código de muestra en esta sección.

La función de devolución de llamada transmitida por el parámetrohandlerrecibe unactxel parámetro.ctxParámetro es un objeto de contexto utilizado para obtener y escribir datos, con los siguientes métodos:

  • ¿Qué es lo que está pasando? Aplicado al protocolo HTTP/TCP, devuelve el nombre del protocolo cuando se llama.HTTP/1.1, tcp.
  • ctx.host(i) Aplicado al protocolo HTTP, devuelve información de host cuando se llama dirección IP y puerto.
  • Ctx.path (en inglés) Aplicado al protocolo HTTP, devuelve la ruta de solicitud cuando se llama.
  • Ctx.query (clave) Aplicado al protocolo HTTP, devuelve el valor correspondiente a la clave de la consulta en la solicitud cuando se llama.http://127.0.0.1:8088?num=123, y la función de procesamiento de devoluciones de llamada transmitida por el parámetrohandlerlas devoluciones"123"¿Cuándo?ctx.query("num")se llama.
  • Ctx.rawQuery (() Aplicado al protocolo Http, cuando se llama, devuelve la consulta original en la solicitud (la consulta de la solicitud Http).
  • Ctx.header (en inglés) Aplicado al protocolo HTTP, y devuelve la información de encabezado de solicitud en la solicitud cuando se llama.
  • Ctx.cabeza (clave) Aplicado al protocolo HTTP, devuelve el valor de una clave en el encabezado de solicitud especificado cuando se llama.User-Agenten los encabezados de la solicitud actual:ctx.header("User-Agent").
  • el método ctx. Aplicado al protocolo HTTP, devuelve el método de solicitud cuando se llama, comoGET, POST, etc.
  • El cuerpo del ctx. Se aplica a la solicitud POST del protocolo HTTP, y devuelve el cuerpo de la solicitud cuando se llama.
  • Ctx.setHeader (clave, valor) Aplicado al protocolo HTTP para establecer la información de encabezado de solicitud del mensaje de respuesta.
  • ctx.setStatus (código) Aplicado al protocolo Http, establece el código de estado del mensaje Http. Por lo general, el código de estado Http se establece al final de la rama de enrutamiento. El valor predeterminado es 200.
  • Ctx.remoteAddr ((() Aplicado al protocolo HTTP/TCP, devuelve la dirección del cliente remoto y el puerto en la solicitud cuando se llama.
  • Ctx.localAddr ((() Aplicado al protocolo HTTP/TCP, devuelve la dirección local y el puerto del servicio cuando se llama.
  • ctx.upgrade ((socket web) Aplicado a la implementación del protocolo Websocket basado en el protocolo Http, cambiando elctxobjeto de contexto al protocolo Websocket; devolviendo un valor booleano (verdadero) si el cambio es exitoso, y un valor booleano (falso) si falla.
  • Ctx.read (tiempo de espera) Aplicado a la implementación del protocolo Websocket / protocolo TCP basado en el protocolo HTTP, lee los datos de la conexión Websocket y la conexión TCP.readmétodo no es compatible en el protocolo HTTP ordinario. Puede especificar el parámetro de tiempo de esperatimeout_msen milisegundos.
  • Ctx. write (s) Aplicado al protocolo HTTP/TCP, utilizado para escribir datos de cadena.JSON.stringify()para codificar el objeto JSON en una cadena y luego escribirlo.WebSocketProtocolo, 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