В__Serve
Функция используется для создания службы HTTP, службы TCP и службы Websocket (на основе протокола HTTP).
Возвращает строку, которая записывает IP-адрес и порт созданной службы.127.0.0.1:8088
, [::]:8089
.
строка
__Serve ((serveURI, обработчик) __Serve ((serveURI, обработчик,...args)
ВserveURI
параметр используется для настройки протокола, IP-адреса, порта и других настроек связи службы, таких какhttp://0.0.0.0:8088?gzip=true
, то есть,http://:8088?gzip=true
.
serveURI
настройка параметров, таких какtcp://127.0.0.1:6666?tls=true
; вы можете добавить сертификаты и частные ключи, такие какtls=true&cert_pem=xxxx&cert_key_pem=xxxx
.serveURI
настройки параметров, например:http://127.0.0.1:6666?gzip=true
; вы можете установить настройки сжатия:gzip=true
- Да.
ВserveURI
параметр используется для Https, напримерhttps://127.0.0.1:6666?tls=true&gzip=true
; вы можете добавитьcert_pem
иcert_key_pem
параметры для загрузки сертификата.служитьURI
неправда
строка
Вhandler
Параметр используется для передачи в функции обработки маршрутизации (протокол HTTP), функции обработки сообщений (протокол TCP) и функции обработки потока (Websocket).
Функция обратного вызова, передаваемая параметромhandler
может определять несколько параметров, первым параметром является объект ctx (контекстный объект).
управляющий
неправда
Функция
Фактический параметр функции обратного вызова передается как параметрhandler
. Может быть несколько параметровarg
, например:
__Serve("http://:8088", function(ctx, a, b, c) {
Log(`ctx.host():`, ctx.host(), ", a=", a, ", b=", b, ", c=", c)
}, 1, 2, 3)
Параметры1
, 2
, 3
прошел в, когда звонить__Serve()
функция соответствует параметрамa
, b
, c
прошел в функции обратного вызова.
арг ложное string, number, bool, object, array, function, null value и другие типы, поддерживаемые системой
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
Вы можете установить ветвь маршрутизации в пути и разработать код реализации дляWebsocket
Вы можете ознакомиться с образцом кода в этом разделе.Функция обратного вызова, передаваемая параметромhandler
получаетctx
параметр.ctx
параметр - это контекстный объект, используемый для получения и записи данных, с следующими методами:
HTTP/1.1
, tcp
.http://127.0.0.1:8088?num=123
, и функция обработки обратного вызова, передаваемая параметромhandler
доходы"123"
когдаctx.query("num")
называется.User-Agent
в заголовках текущей просьбы:ctx.header("User-Agent")
.GET
, POST
, и т.д.ctx
Контекстный объект к протоколу Websocket; возвращение булевого значения (правда), если переключение удалось, и булевого значения (ложь), если оно не удалось.read
Метод не поддерживается в обычном протоколе HTTP. Вы можете указать параметр задержкиtimeout_ms
в миллисекундах.JSON.stringify()
чтобы закодировать объект JSON в строку и затем написать его.WebSocket
протокол, вы можете использовать этот метод для передачи зашифрованной строки клиенту.{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}
Событие Loop _G