資源の読み込みに... 荷物...

__ 仕える

について__ServeHttp サービス,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.

  • TCP プロトコルserveURIパラメータ設定,例えばtcp://127.0.0.1:6666?tls=true証明書やプライベートキーを追加できます.tls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • Http プロトコルserveURIパラメータ設定などhttp://127.0.0.1:6666?gzip=true; 圧縮設定を設定できます:gzip=true- わかった についてserveURIHttps の場合も使用されます.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
  • この関数は JavaScript 言語戦略のみをサポートします.
  • サービススレッドは,グローバルスコープから隔離されているため,閉鎖や外部変数,カスタム関数等への参照をサポートしません.しかし,すべてのプラットフォーム API 関数を呼び出すことができます.
  • についてWebsocket経路にルーティングブランチを設定し,実装コードを設計することができます.Websocketこのセクションのサンプルコードを参照してください.

パラメータによって送信されたコールバック関数handler受け取るctxパラメータctxパラメータは,次の方法でデータを取得し書き込むために使用されるコンテキストオブジェクトです.

  • ctx.proto ((() について Http/TCP プロトコルに適用され,呼び出すときにプロトコル名を返します.例えば:HTTP/1.1, tcp.
  • ctx.host() Http プロトコルに適用すると,IP アドレスとポートを呼んだときにホスト情報を返します.
  • ctx.path ((() について Http プロトコルに適用され,呼び出すときに要求経路を返します.
  • ctx.query (キー) Http プロトコルに適用される.呼び出し時にリクエスト内のキーに対応する値を返します.例えば,送信されたリクエストは:http://127.0.0.1:8088?num=123パラメータによって送信されたコールバック処理機能handlerリターン"123"いつctx.query("num")呼び出されています
  • ctx.rawQuery (() Http プロトコルに適用され,呼び出されると,リクエストの元のクエリ (Http リクエストのクエリ) を返します.
  • ctx.headers ((() について Http プロトコルに適用され,呼び出し時にリクエストのヘッダ情報を返します.
  • ctx.header (キー) 呼び出し時に指定された要求ヘッダのキー値を返します.例えば,User-Agent本願の表記にはctx.header("User-Agent").
  • ctx.method (ctx.方法) について Http プロトコルに適用され,呼び出すときに要求メソッドを返します.GET, POSTなど
  • ctx.body ((() について HTTP プロトコルの POST リクエストに適用され,呼び出されるとリクエストのボディを返します.
  • ctx.setHeader (キー,値) Http プロトコルに適用され,応答メッセージの要求ヘッダ情報を設定する.
  • ctx.setStatus (コード) Http プロトコルに適用され,Http メッセージの状態コードを設定します.通常,Http 状態コードはルーティング ブランチの最後に設定されます.デフォルト値は 200.
  • ctx.remoteAddr ((() について Http/TCP プロトコルに適用され,リモート クライアント アドレスとポートをリクエストで返します.
  • ctx.localAddr ((() Http/TCP プロトコルに適用され,呼び出し時にサービスのローカルアドレスとポートを返します.
  • ctx.upgrade (WEBソケット) Webソケットプロトコルの実装に適用されます.ctxWebソケットプロトコルへのコンテキストオブジェクト; スイッチが成功した場合にブール値 (true) と失敗した場合にブール値 (false) を返します.
  • ctx.read (タイムアウト) HTTP プロトコルに基づく Websocket プロトコル実装/TCP プロトコルに適用され, Websocket 接続と TCP 接続のデータを読みます.readタイムアウトパラメータを指定できます.timeout_ms数ミリ秒で
  • ctx.write ((s) について 文字列のデータを書くために使用できます.JSON.stringify()JSON オブジェクトを文字列にコードし,それを書き込みます.WebSocket暗号化された文字列をクライアントに送信します

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go} ウェブ上で検索するサイト

イベントループ _G