В процессе загрузки ресурсов... загрузка...

__Сервировать

В__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.

  • Протокол TCPserveURIнастройка параметров, таких какtcp://127.0.0.1:6666?tls=true; вы можете добавить сертификаты и частные ключи, такие какtls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • Протокол HTTPserveURIнастройки параметров, например: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
  • Эта функция поддерживает только стратегии языка JavaScript.
  • Служебная нить изолирована от глобального объема, поэтому она не поддерживает закрытия или ссылки на внешние переменные, пользовательские функции и т. Д.; однако она может вызвать все функции API платформы.
  • ВWebsocketВы можете установить ветвь маршрутизации в пути и разработать код реализации дляWebsocketВы можете ознакомиться с образцом кода в этом разделе.

Функция обратного вызова, передаваемая параметромhandlerполучаетctxпараметр.ctxпараметр - это контекстный объект, используемый для получения и записи данных, с следующими методами:

  • ctx.proto ((() Применяется к протоколу Http/TCP, возвращает имя протокола при вызове.HTTP/1.1, tcp.
  • ctx.host() Применяется к протоколу Http, он возвращает информацию хоста при вызове IP-адреса и порта.
  • ctx.path ((() Применяется к протоколу HTTP, возвращает путь запроса при вызове.
  • ctx.query (ключ) Применяется к протоколу Http, возвращает значение, соответствующее ключу в запросе при вызове.http://127.0.0.1:8088?num=123, и функция обработки обратного вызова, передаваемая параметромhandlerдоходы"123"когдаctx.query("num")называется.
  • ctx.rawQuery() Применяется к протоколу HTTP, при вызове возвращает исходный запрос в запросе (запрос запроса HTTP).
  • ctx.headers (включая заголовки) Применяется к протоколу HTTP и возвращает информацию заголовка запроса в запросе при вызове.
  • ctx.header (ключ) Применяется к протоколу HTTP, он возвращает значение ключа в заголовке запроса при вызове.User-Agentв заголовках текущей просьбы:ctx.header("User-Agent").
  • ctx.method (() Применяется к протоколу Http, возвращает метод запроса при вызове, напримерGET, POST, и т.д.
  • ctx.body ((() Применяется к запросу POST протокола HTTP и возвращает тело запроса при вызове.
  • ctx.setHeader ((ключ, значение) Применяется к протоколу Http для настройки запроса заголовка информации ответа сообщения.
  • ctx.setСтатус (код) Применяется к протоколу Http, устанавливается код состояния сообщения Http. Обычно код состояния Http устанавливается в конце ветви маршрутизации. Значение по умолчанию - 200.
  • ctx.remoteAddr ((() Применяется к протоколу HTTP/TCP, возвращает удаленный адрес клиента и порт в запросе при вызове.
  • ctx.localAddr() Применяется к протоколу HTTP/TCP, возвращает локальный адрес и порт службы при вызове.
  • ctx.upgrade ((websocket) Применяется для реализации протокола Websocket на основе протокола Http, переключаяctxКонтекстный объект к протоколу Websocket; возвращение булевого значения (правда), если переключение удалось, и булевого значения (ложь), если оно не удалось.
  • ctx.read ((timeout_ms) Применяется для реализации протокола Websocket/протокола TCP на основе протокола HTTP, считывает данные соединения Websocket и соединения TCP.readМетод не поддерживается в обычном протоколе HTTP. Вы можете указать параметр задержкиtimeout_msв миллисекундах.
  • ctx.write ((s) Применяется к протоколу HTTP/TCP, используется для записи строки данных.JSON.stringify()чтобы закодировать объект JSON в строку и затем написать его.WebSocketпротокол, вы можете использовать этот метод для передачи зашифрованной строки клиенту.

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

Событие Loop _G