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:
HTTP/1.1
, tcp
.http://127.0.0.1:8088?num=123
, dan fungsi pemrosesan callback yang diteruskan oleh parameterhandler
kembali"123"
kapan?ctx.query("num")
disebut.User-Agent
dalam judul permintaan saat ini:ctx.header("User-Agent")
.GET
, POST
, dll.ctx
objek konteks ke protokol Websocket; mengembalikan nilai Boolean (benar) jika switch berhasil, dan nilai Boolean (palsu) jika gagal.read
metode tidak didukung dalam protokol HTTP biasa. Anda dapat menentukan parameter timeouttimeout_ms
dalam milidetik.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