について__Serve
Http サービス,TCP サービス,Webソケット サービス (Http プロトコルに基づく) を作成するために使用されます.
作成されたサービスの IP アドレスとポートを記録する文字列を返します.例えば:127.0.0.1:8088
, [::]:8089
.
文字列
__Serve (サーバーURI,ハンドラー) __Serve (サーバーURI,ハンドラー,...args)
についてserveURI
パラメータは,プロトコル,IPアドレス,ポート,および他の設定を設定するために使用されます.http://0.0.0.0:8088?gzip=true
つまりhttp://:8088?gzip=true
.
serveURI
パラメータ設定,例えばtcp://127.0.0.1:6666?tls=true
証明書やプライベートキーを追加できます.tls=true&cert_pem=xxxx&cert_key_pem=xxxx
.serveURI
パラメータ設定などhttp://127.0.0.1:6666?gzip=true
; 圧縮設定を設定できます:gzip=true
- わかった
についてserveURI
Https の場合も使用されます.https://127.0.0.1:6666?tls=true&gzip=true
追加することもできますcert_pem
そしてcert_key_pem
証明書の読み込みのパラメータサービスURI
本当
文字列
についてhandler
このパラメータは,ルーティング処理機能 (Http プロトコル),メッセージ処理機能 (TCP プロトコル),ストリーム処理機能 (Webソケット) に渡すのに使用されます.
パラメータによって送信されたコールバック関数handler
複数のパラメータを定義できます 最初のパラメータは ctx オブジェクト (コンテキスト オブジェクト) です
ハンドラー
本当
機能
コールバック関数の実際のパラメータがパラメータとして渡されますhandler
複数のパラメータがある可能性があります.arg
例えば:
__Serve("http://:8088", function(ctx, a, b, c) {
Log(`ctx.host():`, ctx.host(), ", a=", a, ", b=", b, ", c=", c)
}, 1, 2, 3)
パラメータ1
, 2
, 3
呼び出すときに通過した__Serve()
パラメータに対応する機能a
, b
, c
コールバック機能で通過しました
アルグ 偽り 文字列,数,ボール,オブジェクト,配列,関数,ゼロ値,システムでサポートされる他のタイプ
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
経路にルーティングブランチを設定し,実装コードを設計することができます.Websocket
このセクションのサンプルコードを参照してください.パラメータによって送信されたコールバック関数handler
受け取るctx
パラメータctx
パラメータは,次の方法でデータを取得し書き込むために使用されるコンテキストオブジェクトです.
HTTP/1.1
, tcp
.http://127.0.0.1:8088?num=123
パラメータによって送信されたコールバック処理機能handler
リターン"123"
いつctx.query("num")
呼び出されていますUser-Agent
本願の表記にはctx.header("User-Agent")
.GET
, POST
などctx
Webソケットプロトコルへのコンテキストオブジェクト; スイッチが成功した場合にブール値 (true) と失敗した場合にブール値 (false) を返します.read
タイムアウトパラメータを指定できます.timeout_ms
数ミリ秒でJSON.stringify()
JSON オブジェクトを文字列にコードし,それを書き込みます.WebSocket
暗号化された文字列をクライアントに送信します{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go} ウェブ上で検索するサイト
イベントループ _G