Peraturan__Serve
fungsi 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)
PeraturanserveURI
parameter 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
.
serveURI
pengaturan 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
.serveURI
pengaturan parameter, sepertihttp://127.0.0.1:6666?gzip=true
; Anda dapat mengatur pengaturan kompresi:gzip=true
Aku tidak tahu.
PeraturanserveURI
parameter digunakan untuk Https, sepertihttps://127.0.0.1:6666?tls=true&gzip=true
; Anda dapat menambahkancert_pem
dancert_key_pem
parameter untuk memuat sertifikat.melayaniURI
benar
string
Peraturanhandler
Parameter digunakan untuk lulus dalam fungsi pemrosesan routing (Http protokol), fungsi pemrosesan pesan (TCP protokol), dan fungsi pemrosesan Stream (Websocket).
Fungsi callback yang diteruskan oleh parameterhandler
dapat mendefinisikan beberapa parameter, parameter pertama adalah objek ctx (objek konteks).
pengelola
benar
fungsi
Parameter sebenarnya dari fungsi callback yang dilewati sebagai parameterhandler
Mungkin 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
, 3
melewati saat memanggil__Serve()
fungsi sesuai dengan parametera
, b
, c
dilewati 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
Websocket
layanan diimplementasikan berdasarkan protokol Http. Anda dapat mengatur cabang routing di jalur dan merancang kode implementasi untukWebsocket
Anda dapat melihat contoh kode di bagian ini.Fungsi callback yang diteruskan oleh parameterhandler
menerimactx
parameter.ctx
parameter 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
Aku tidak tahu.
- 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 parameterhandler
kembali"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-Agent
dalam judul permintaan saat ini:ctx.header("User-Agent")
Aku tidak tahu.
- ctx.metode (()
Terapkan pada protokol Http, mengembalikan metode permintaan saat dipanggil, sepertiGET
, POST
, dll.
- ctx.body ((()
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 ((ctx
objek 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.read
metode tidak didukung dalam protokol HTTP biasa. Anda dapat menentukan parameter timeouttimeout_ms
dalam 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.WebSocket
protokol, Anda dapat menggunakan metode ini untuk melewati string yang dienkode ke klien.
{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}
EventLoop _G