Sumber daya yang dimuat... Pemuatan...

__Servis

Peraturan__Servefungsi digunakan untuk membuat layanan HTTP, layanan TCP, dan layanan Websocket (berdasarkan protokol HTTP).

Mengembalikan string yang mencatat alamat IP dan port dari layanan yang dibuat.127.0.0.1:8088, [::]:8089.

string

__Serve (serveURI, pengelola) __Serve ((serveURI, handler,...args)

PeraturanserveURIparameter digunakan untuk mengkonfigurasi protokol, alamat IP, port dan pengaturan lain dari layanan mengikat, sepertihttp://0.0.0.0:8088?gzip=true, yaitu,http://:8088?gzip=true.

  • Protokol TCPserveURIpengaturan parameter, sepertitcp://127.0.0.1:6666?tls=true; Anda dapat menambahkan sertifikat dan kunci pribadi, sepertitls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • Protokol HttpserveURIpengaturan parameter, sepertihttp://127.0.0.1:6666?gzip=true; Anda dapat mengatur pengaturan kompresi:gzip=trueAku tidak tahu. PeraturanserveURIparameter digunakan untuk Https, sepertihttps://127.0.0.1:6666?tls=true&gzip=true; Anda dapat menambahkancert_pemdancert_key_pemparameter untuk memuat sertifikat.

melayaniURI benar string PeraturanhandlerParameter digunakan untuk lulus dalam fungsi pemrosesan routing (Http protokol), fungsi pemrosesan pesan (TCP protokol), dan fungsi pemrosesan Stream (Websocket). Fungsi callback yang diteruskan oleh parameterhandlerdapat mendefinisikan beberapa parameter, parameter pertama adalah objek ctx (objek konteks).

pengelola benar fungsi Parameter sebenarnya dari fungsi callback yang dilewati sebagai parameterhandlerMungkin ada beberapa parameter.arg, misalnya:

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

Parameter1, 2, 3melewati saat memanggil__Serve()fungsi sesuai dengan parametera, b, cdilewati dalam fungsi callback.

arg palsu string, number, bool, object, array, function, null value dan tipe lain yang didukung oleh sistem

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
  • Fungsi ini hanya mendukung strategi bahasa JavaScript.
  • Thread layanan terisolasi dari ruang lingkup global, sehingga tidak mendukung penutupan atau referensi ke variabel eksternal, fungsi kustom, dll.; Namun, dapat memanggil semua fungsi API platform.
  • PeraturanWebsocketlayanan diimplementasikan berdasarkan protokol Http. Anda dapat mengatur cabang routing di jalur dan merancang kode implementasi untukWebsocketAnda dapat melihat contoh kode di bagian ini.

Fungsi callback yang diteruskan oleh parameterhandlermenerimactxparameter.ctxparameter adalah objek konteks yang digunakan untuk mendapatkan dan menulis data, dengan metode berikut:

  • ctx.proto ((() Terapan pada protokol Http/TCP, mengembalikan nama protokol saat dipanggil.HTTP/1.1, tcp.
  • ctx.host() Diterapkan pada protokol Http, ini mengembalikan informasi host ketika dipanggil alamat IP dan port.
  • ctx.path ((() Terapkan pada protokol Http, mengembalikan jalur permintaan saat dipanggil.
  • ctx.query (kunci) Diterapkan pada protokol Http, mengembalikan nilai yang sesuai dengan kunci dalam kueri dalam permintaan ketika dipanggil.http://127.0.0.1:8088?num=123, dan fungsi pemrosesan callback yang diteruskan oleh parameterhandlerkembali"123"kapan?ctx.query("num")disebut.
  • ctx.rawQuery() Terapan pada protokol Http, ketika dipanggil, mengembalikan kueri asli dalam permintaan (kueri permintaan Http).
  • ctx.headers ((() Terapan pada protokol Http, dan mengembalikan informasi request header dalam request saat dipanggil.
  • ctx.header (kunci) Diterapkan pada protokol Http, mengembalikan nilai kunci di header permintaan yang ditentukan ketika dipanggil.User-Agentdalam judul permintaan saat ini:ctx.header("User-Agent").
  • ctx.metode (() Terapkan pada protokol Http, mengembalikan metode permintaan saat dipanggil, sepertiGET, POST, dll.
  • Ctx.body (dalam bahasa Inggris) Terapkan pada permintaan POST dari protokol Http, dan mengembalikan tubuh permintaan saat dipanggil.
  • ctx.setHeader (kunci, nilai) Digunakan pada protokol Http untuk mengatur informasi request header dari pesan respons.
  • ctx.setStatus (kode) Aplikasi untuk protokol Http, mengatur kode status pesan Http. Biasanya, kode status Http ditetapkan di akhir cabang routing. Nilai default adalah 200.
  • ctx.remoteAddr() Terapan pada protokol Http/TCP, mengembalikan alamat klien jarak jauh dan port dalam permintaan saat dipanggil.
  • ctx.localAddr() Terapan pada protokol Http/TCP, mengembalikan alamat lokal dan port layanan saat dipanggil.
  • ctx.upgrade ((websocket) diterapkan pada implementasi protokol Websocket berdasarkan protokol Http, beralihctxobjek konteks ke protokol Websocket; mengembalikan nilai Boolean (benar) jika switch berhasil, dan nilai Boolean (palsu) jika gagal.
  • ctx.read ((timeout_ms) Terapkan pada implementasi protokol Websocket / protokol TCP berdasarkan protokol Http, membaca data koneksi Websocket dan koneksi TCP.readmetode tidak didukung dalam protokol HTTP biasa. Anda dapat menentukan parameter timeouttimeout_msdalam milidetik.
  • ctx.write (s) Dilakukan pada protokol Http/TCP, digunakan untuk menulis data string.JSON.stringify()untuk mengenkode objek JSON ke dalam string dan kemudian menulisnya.WebSocketprotokol, Anda dapat menggunakan metode ini untuk melewati string yang dienkode ke klien.

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

EventLoop _G