O__Serve
A 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)
OserveURI
O 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
.
serveURI
definiçã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
.serveURI
configuraçõ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.
OserveURI
Parâmetro é usado para Https, tais comohttps://127.0.0.1:6666?tls=true&gzip=true
Pode acrescentarcert_pem
ecert_key_pem
Parâmetros para carregar o certificado.ServirURI
verdade
cordel
Ohandler
O 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âmetrohandler
Pode 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âmetrohandler
Pode 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
, 3
Passado em quando chamar o__Serve()
função correspondem aos parâmetrosa
, b
, c
Passado 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
Websocket
Você pode definir um ramo de roteamento no caminho e projetar o código de implementação paraWebsocket
Pode consultar o código de exemplo nesta secção.A função de chamada de volta transmitida pelo parâmetrohandler
recebe umctx
Parâmetro.ctx
Parâmetro é um objeto de contexto utilizado para obter e escrever dados, com os seguintes métodos:
HTTP/1.1
, tcp
.http://127.0.0.1:8088?num=123
, e a função de processamento de chamada de retorno transmitida pelo parâmetrohandler
retorno"123"
Quando?ctx.query("num")
é chamado.User-Agent
nos cabeçalhos do presente pedido:ctx.header("User-Agent")
.GET
, POST
, etc.ctx
objeto 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.read
método não é suportado no protocolo HTTP comum. Você pode especificar o parâmetro timeouttimeout_ms
em milissegundos.JSON.stringify()
para codificar o objeto JSON em uma cadeia de caracteres e, em seguida, escrevê-lo.WebSocket
protocolo, 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