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:
- 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 parameterhandler
pengembalian"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-Agent
Dalam 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 (kod)
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 ((ctx
objek 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.read
anda boleh menentukan parameter timeouttimeout_ms
dalam 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.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