리소스 로딩... 로딩...

__서비스

__Serve이 함수는 Http 서비스, TCP 서비스, 웹소켓 서비스 (Http 프로토콜을 기반으로) 를 생성하는 데 사용됩니다.

생성된 서비스의 IP 주소와 포트를 기록하는 문자열을 반환합니다. 예를 들어:127.0.0.1:8088, [::]:8089.

문자열

__서비스 (서비스URI, 관리자) __서비스 (서비스 (SERVURI, 핸들러,...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인증서를 로드하는 매개 변수

serveURI 사실 문자열 의handler이 매개 변수는 라우팅 처리 함수 (Http 프로토콜), 메시지 처리 함수 (TCP 프로토콜), 스트림 처리 함수 (Websocket) 에서 전달하는 데 사용됩니다. 매개 변수에서 전달된 콜백 함수handler여러 매개 변수를 정의할 수 있는데 첫 번째 매개 변수는 ctx 객체 (context object) 입니다.

관리자 사실 기능 콜백 함수의 실제 매개 변수는 매개 변수로 전달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콜백 함수에서 통과했습니다.

아그 거짓 문자열, 숫자, bool, 객체, 배열, 함수, null 값 및 시스템에서 지원되는 다른 유형

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
  • 이 함수는 자바스크립트 언어 전략만 지원합니다.
  • 서비스 스레드는 글로벌 범위에서 격리되어 있으므로 종료 또는 외부 변수, 사용자 정의 함수 등에 대한 참조를 지원하지 않습니다. 그러나 모든 플랫폼 API 함수를 호출 할 수 있습니다.
  • WebsocketHttp 프로토콜에 기반하여 구현됩니다. 경로에서 라우팅 브랜치를 설정하고 실행 코드를 설계할 수 있습니다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 (키) Http 프로토콜에 적용, 그것은 호출 때 지정된 요청 헤더에 키의 값을 반환합니다. 예를 들어,User-Agent현재 요청의 제목에:ctx.header("User-Agent").
  • ctx.method (() 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 ((websocket)) HTTP 프로토콜을 기반으로 웹소켓 프로토콜 구현에 적용, 전환ctx컨텍스트 객체에 웹소켓 프로토콜; 귀환 boolean 값 (진짜) 전환이 성공하면, 그리고 boolean 값 (거짓) 실패하면.
  • ctx.read ((timeout_ms) HTTP 프로토콜을 기반으로 웹소켓 프로토콜 구현 / TCP 프로토콜에 적용, 웹소켓 연결과 TCP 연결의 데이터를 읽습니다.read이 방법은 일반적인 HTTP 프로토콜에서 지원되지 않습니다. 당신은 타임 아웃 매개 변수를 지정할 수 있습니다timeout_ms밀리 초에
  • ctx.write ((s) Http/TCP 프로토콜에 적용, 문자열 데이터를 작성하는 데 사용됩니다.JSON.stringify()JSON 객체를 문자열로 인코딩하고WebSocket프로토콜, 이 방법을 사용하여 암호화된 문자열을 클라이언트에 전달할 수 있습니다.

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}

이벤트 루프 _G