O recurso está a ser carregado... Carregamento...

__ Servir

O__ServeA função é usada para criar o serviço HTTP, o serviço TCP e o serviço Websocket (baseado no protocolo HTTP).

Retorna uma cadeia que registra o endereço IP e a porta do serviço criado.127.0.0.1:8088, [::]:8089.

cordel

__Serve ((serveURI, manipulador) __Serve ((serveURI, manipulador,...args)

OserveURIO parâmetro é usado para configurar o protocolo, endereço IP, porta e outras configurações da ligação do serviço, tais comohttp://0.0.0.0:8088?gzip=true, isto é,http://:8088?gzip=true.

  • Protocolo TCPserveURIdefinição de parâmetros, tais comotcp://127.0.0.1:6666?tls=true; pode adicionar certificados e chaves privadas, tais comotls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • Protocolo HTTPserveURIconfigurações de parâmetros, tais como:http://127.0.0.1:6666?gzip=true; pode definir as configurações de compressão:gzip=true- Não. OserveURIParâmetro é usado para Https, tais comohttps://127.0.0.1:6666?tls=true&gzip=truePode acrescentarcert_pemecert_key_pemParâmetros para carregar o certificado.

ServirURI verdade cordel OhandlerO parâmetro é usado para passar na função de processamento de roteamento (protocolo HTTP), função de processamento de mensagens (protocolo TCP) e função de processamento de fluxo (Websocket). A função de chamada de volta transmitida pelo parâmetrohandlerPode definir vários parâmetros, o primeiro parâmetro é o objeto ctx (objeto de contexto).

manipulador verdade função O parâmetro real da função callback passado como o parâmetrohandlerPode haver vários parâmetrosarg, por exemplo:

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

Os parâmetros1, 2, 3Passado em quando chamar o__Serve()função correspondem aos parâmetrosa, b, cPassado na função de chamada de volta.

arg Falso cadeia, número, bool, objeto, matriz, função, valor nulo e outros tipos suportados pelo 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 função suporta apenas estratégias da linguagem JavaScript.
  • O tópico de serviço está isolado do escopo global, por isso não suporta fechamentos ou referências a variáveis externas, funções personalizadas, etc.; no entanto, pode chamar todas as funções da API da plataforma.
  • OWebsocketVocê pode definir um ramo de roteamento no caminho e projetar o código de implementação paraWebsocketPode consultar o código de exemplo nesta secção.

A função de chamada de volta transmitida pelo parâmetrohandlerrecebe umctxParâmetro.ctxParâmetro é um objeto de contexto utilizado para obter e escrever dados, com os seguintes métodos:

  • ctx.proto (() Aplicado ao protocolo Http/TCP, retorna o nome do protocolo quando chamado.HTTP/1.1, tcp.
  • ctx.host() Aplicado ao protocolo HTTP, ele retorna informações de host quando chamado endereço IP e porta.
  • Ctx.path (em inglês) Aplicado ao protocolo HTTP, retorna o caminho de solicitação quando chamado.
  • Ctx.query (chave) Aplicado ao protocolo HTTP, retorna o valor correspondente à chave na consulta na solicitação quando chamada.http://127.0.0.1:8088?num=123, e a função de processamento de chamada de retorno transmitida pelo parâmetrohandlerretorno"123"Quando?ctx.query("num")é chamado.
  • ctx.rawQuery() Aplicado ao protocolo HTTP, quando chamado, retorna a consulta original na solicitação (a consulta da solicitação HTTP).
  • Ctx.header (s) Aplicado ao protocolo Http, e retorna as informações do cabeçalho da solicitação na solicitação quando chamada.
  • Ctx.header (chave) Aplicado ao protocolo HTTP, ele retorna o valor de uma chave no cabeçalho de solicitação especificado quando chamado.User-Agentnos cabeçalhos do presente pedido:ctx.header("User-Agent").
  • Ctx.método Aplicado ao protocolo Http, retorna o método de solicitação quando chamado, comoGET, POST, etc.
  • Ctx.corpo Aplicado ao pedido POST do protocolo HTTP, e retorna o corpo do pedido quando chamado.
  • ctx.setHeader ((chave, valor) Aplicado ao protocolo Http para definir as informações de cabeçalho de solicitação da mensagem de resposta.
  • ctx.setStatus (código) Aplicado ao protocolo Http, define o código de status da mensagem Http. Normalmente, o código de status Http é definido no final do ramo de roteamento. O valor padrão é 200.
  • ctx.remoteAddr() Aplicado ao protocolo Http/TCP, retorna o endereço do cliente remoto e a porta na solicitação quando chamada.
  • ctx.localAddr() Aplicado ao protocolo Http/TCP, retorna o endereço local e a porta do serviço quando chamado.
  • ctx.upgrade ((websocket) Aplicado à implementação do protocolo Websocket baseado no protocolo Http, comutando octxobjeto de contexto para o protocolo Websocket; devolvendo um valor booleano (verdadeiro) se a mudança for bem-sucedida e um valor booleano (falso) se falhar.
  • ctx.read ((timeout_ms) Aplicado à implementação do protocolo Websocket/protocolo TCP baseado no protocolo HTTP, lê dados da conexão Websocket e conexão TCP.readmétodo não é suportado no protocolo HTTP comum. Você pode especificar o parâmetro timeouttimeout_msem milissegundos.
  • Ctx.write (s) Aplicado ao protocolo HTTP/TCP, usado para escrever dados de cadeia.JSON.stringify()para codificar o objeto JSON em uma cadeia de caracteres e, em seguida, escrevê-lo.WebSocketprotocolo, você pode usar este método para passar a cadeia codificada para o cliente.

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}

EventLoop _G