Sumber dimuat naik... memuat...

__ Berkhidmat

Peraturan__Servefungsi digunakan untuk membuat perkhidmatan Http, perkhidmatan TCP, dan perkhidmatan Websocket (berdasarkan protokol Http).

Mengembalikan rentetan yang merekodkan alamat IP dan pelabuhan perkhidmatan yang dicipta.127.0.0.1:8088, [::]:8089.

senar

__Serve (serveURI, pengendali) __Serve ((serveURI, pengendali,...args)

PeraturanserveURIparameter digunakan untuk mengkonfigurasi protokol, alamat IP, pelabuhan dan tetapan lain yang mengikat perkhidmatan, sepertihttp://0.0.0.0:8088?gzip=true, iaitu,http://:8088?gzip=true.

  • Protokol TCPserveURItetapan parameter, sepertitcp://127.0.0.1:6666?tls=true; anda boleh menambah sijil dan kunci peribadi, sepertitls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • Protokol HTTPserveURItetapan parameter, sepertihttp://127.0.0.1:6666?gzip=true; anda boleh menetapkan tetapan mampatan:gzip=true. PeraturanserveURIparameter digunakan untuk Https, sepertihttps://127.0.0.1:6666?tls=true&gzip=true; anda boleh menambahcert_pemdancert_key_pemparameter untuk memuat sijil.

berkhidmatURI betul senar PeraturanhandlerParameter digunakan untuk lulus dalam fungsi pemprosesan laluan (protokol HTTP), fungsi pemprosesan mesej (protokol TCP), dan fungsi pemprosesan aliran (Websocket). Fungsi panggilan balik yang dihantar oleh parameterhandlerboleh menentukan beberapa parameter, parameter pertama adalah objek ctx (objek konteks).

pengendali betul fungsi Parameter sebenar fungsi callback yang dihantar sebagai parameterhandlerMungkin ada pelbagai parameter.argContohnya:

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

Parameter1, 2, 3telah berlalu dalam apabila memanggil__Serve()fungsi sepadan dengan parametera, b, cdilewatkan dalam fungsi panggilan balik.

arg palsu rentetan, nombor, bool, objek, susunan, fungsi, nilai sifar dan jenis lain yang disokong 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 menyokong strategi bahasa JavaScript sahaja.
  • Benang perkhidmatan terpencil dari skop global, jadi ia tidak menyokong penutupan atau rujukan kepada pembolehubah luaran, fungsi tersuai, dan lain-lain; Walau bagaimanapun, ia boleh memanggil semua fungsi API platform.
  • PeraturanWebsocketPerkhidmatan ini dilaksanakan berdasarkan protokol Http. Anda boleh menetapkan cawangan penghala dalam laluan dan merancang kod pelaksanaan untukWebsocketAnda boleh merujuk kepada contoh kod di bahagian ini.

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

  • ctx.proto (() Digunakan untuk protokol Http/TCP, mengembalikan nama protokol apabila dipanggil.HTTP/1.1, tcp.
  • ctx.host() Digunakan untuk protokol Http, ia mengembalikan maklumat hos apabila dipanggil alamat IP dan port.
  • ctx.path ((() Digunakan pada protokol Http, mengembalikan laluan permintaan apabila dipanggil.
  • ctx.query (kunci) Digunakan untuk protokol Http, mengembalikan nilai yang sepadan dengan kunci dalam pertanyaan dalam permintaan apabila dipanggil.http://127.0.0.1:8088?num=123, dan fungsi pemprosesan panggilan balik yang dihantar oleh parameterhandlerpengembalian"123"bila?ctx.query("num")dipanggil.
  • ctx.rawQuery() Digunakan untuk protokol Http, apabila dipanggil, mengembalikan pertanyaan asal dalam permintaan (soalan permintaan Http).
  • ctx.headers ((() Digunakan untuk protokol HTTP, dan mengembalikan maklumat tajuk permintaan dalam permintaan apabila dipanggil.
  • Ctx.header (kunci) Digunakan untuk protokol Http, ia mengembalikan nilai kunci dalam tajuk permintaan yang ditentukan apabila dipanggil.User-AgentDalam tajuk permintaan semasa:ctx.header("User-Agent").
  • ctx.metod ()) Digunakan untuk protokol Http, mengembalikan kaedah permintaan apabila dipanggil, sepertiGET, POST, dan lain-lain
  • ctx.body ((() Digunakan untuk permintaan POST protokol HTTP, dan mengembalikan badan permintaan apabila dipanggil.
  • ctx.setHeader (kunci, nilai) Digunakan untuk protokol HTTP untuk menetapkan maklumat tajuk permintaan mesej tindak balas.
  • ctx.setStatus (kode) digunakan untuk protokol Http, menetapkan kod status mesej Http. Biasanya, kod status Http ditetapkan di akhir cawangan penghalaan. Nilai lalai adalah 200.
  • ctx.remoteAddr() Digunakan untuk protokol Http / TCP, mengembalikan alamat klien jauh dan port dalam permintaan apabila dipanggil.
  • ctx.localAddr() Digunakan untuk protokol HTTP / TCP, mengembalikan alamat tempatan dan pelabuhan perkhidmatan apabila dipanggil.
  • ctx.upgrade ((websocket) Digunakan untuk pelaksanaan protokol Websocket berdasarkan protokol Http, menukarctxobjek konteks kepada protokol Websocket; mengembalikan nilai Boolean (benar) jika suis berjaya, dan nilai Boolean (salah) jika gagal.
  • ctx.read ((timeout_ms) Digunakan untuk pelaksanaan protokol Websocket / protokol TCP berdasarkan protokol Http, membaca data sambungan Websocket dan sambungan TCP.readanda boleh menentukan parameter timeouttimeout_msdalam milidetik.
  • ctx.write (s) Digunakan untuk protokol HTTP/TCP, digunakan untuk menulis data rentetan.JSON.stringify()untuk mengkod objek JSON ke dalam rentetan dan kemudian menulisnya.WebSocketProtokol, anda boleh menggunakan kaedah ini untuk lulus rentetan dikodkan kepada pelanggan.

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

EventLoop _G