Peraturan__Serve
fungsi 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)
PeraturanserveURI
parameter 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
.
serveURI
tetapan 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
.serveURI
tetapan parameter, sepertihttp://127.0.0.1:6666?gzip=true
; anda boleh menetapkan tetapan mampatan:gzip=true
.
PeraturanserveURI
parameter digunakan untuk Https, sepertihttps://127.0.0.1:6666?tls=true&gzip=true
; anda boleh menambahcert_pem
dancert_key_pem
parameter untuk memuat sijil.berkhidmatURI
betul
senar
Peraturanhandler
Parameter 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 parameterhandler
boleh menentukan beberapa parameter, parameter pertama adalah objek ctx (objek konteks).
pengendali
betul
fungsi
Parameter sebenar fungsi callback yang dihantar sebagai parameterhandler
Mungkin ada pelbagai parameter.arg
Contohnya:
__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
telah berlalu dalam apabila memanggil__Serve()
fungsi sepadan dengan parametera
, b
, c
dilewatkan 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
Websocket
Perkhidmatan ini dilaksanakan berdasarkan protokol Http. Anda boleh menetapkan cawangan penghala dalam laluan dan merancang kod pelaksanaan untukWebsocket
Anda boleh merujuk kepada contoh kod di bahagian ini.Fungsi callback yang dihantar oleh parameterhandler
menerimactx
parameter.ctx
parameter adalah objek konteks yang digunakan untuk mendapatkan dan menulis data, dengan kaedah berikut:
HTTP/1.1
, tcp
.http://127.0.0.1:8088?num=123
, dan fungsi pemprosesan panggilan balik yang dihantar oleh parameterhandler
pengembalian"123"
bila?ctx.query("num")
dipanggil.User-Agent
Dalam tajuk permintaan semasa:ctx.header("User-Agent")
.GET
, POST
, dan lain-lainctx
objek konteks kepada protokol Websocket; mengembalikan nilai Boolean (benar) jika suis berjaya, dan nilai Boolean (salah) jika gagal.read
anda boleh menentukan parameter timeouttimeout_ms
dalam milidetik.JSON.stringify()
untuk mengkod objek JSON ke dalam rentetan dan kemudian menulisnya.WebSocket
Protokol, anda boleh menggunakan kaedah ini untuk lulus rentetan dikodkan kepada pelanggan.{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}
EventLoop _G