وسائل لوڈ ہو رہے ہیں... لوڈنگ...

__ خدمت کریں

کے__Serveیہ فنکشن HTTP سروس، TCP سروس، اور Websocket سروس (Http پروٹوکول پر مبنی) بنانے کے لئے استعمال کیا جاتا ہے.

ایک تار لوٹاتا ہے جو تخلیق کردہ سروس کا آئی پی ایڈریس اور پورٹ ریکارڈ کرتا ہے۔ مثال کے طور پر:127.0.0.1:8088, [::]:8089.

سٹرنگ

__Serve ((serveURI، ہینڈلر) __Serve ((serveURI، ہینڈلر،...args)

کےserveURIپیرامیٹر پروٹوکول، آئی پی ایڈریس، بندرگاہ اور سروس منسلک کرنے کی دیگر ترتیبات کو ترتیب دینے کے لئے استعمال کیا جاتا ہے، جیسے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.
  • HTTP پروٹوکول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 پروٹوکول) ، اور سٹریم پروسیسنگ فنکشن (ویب ساکٹ) میں منتقل کرنے کے لئے استعمال کیا جاتا ہے. کال بیک فنکشن پیرامیٹر کی طرف سے منتقل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کال بیک فنکشن میں منظور.

ارگ غلط string، number، bool، object، array، function، null value اور نظام کی حمایت کی دیگر اقسام

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 افعال کو کال کرسکتا ہے۔
  • کےWebsocketسروس HTTP پروٹوکول کی بنیاد پر لاگو کیا جاتا ہے. آپ کے راستے میں ایک روٹنگ شاخ مقرر کر سکتے ہیں اور کے لئے لاگو کرنے کا کوڈ ڈیزائنWebsocketآپ اس سیکشن میں نمونہ کوڈ کا حوالہ دے سکتے ہیں۔

کال بیک فنکشن پیرامیٹر کی طرف سے منتقلhandlerوصول کرتا ہےctxپیرامیٹر.ctxپیرامیٹر ایک سیاق و سباق کا اعتراض ہے جو مندرجہ ذیل طریقوں کے ساتھ ڈیٹا حاصل کرنے اور لکھنے کے لئے استعمال ہوتا ہے۔

  • ctx.proto (() ایچ ٹی پی / ٹی سی پی پروٹوکول پر لاگو ہوتا ہے ، جب بلایا جاتا ہے تو پروٹوکول کا نام لوٹاتا ہے۔ مثال کے طور پر:HTTP/1.1, tcp.
  • ctx.host() ایچ ٹی پی پروٹوکول پر لاگو ہوتا ہے، جب یہ آئی پی ایڈریس اور بندرگاہ کو بلایا جاتا ہے تو میزبان کی معلومات واپس کرتا ہے.
  • ctx.path (() HTTP پروٹوکول پر لاگو ہوتا ہے، جب بلایا جاتا ہے تو درخواست کا راستہ واپس کرتا ہے.
  • ctx.query (کلید) ایچ ٹی پی پروٹوکول پر لاگو ہوتا ہے ، جب کال کی جاتی ہے تو درخواست میں استفسار میں کلید سے متعلق قیمت واپس کردیتا ہے۔ مثال کے طور پر ، جو درخواست بھیجی جاتی ہے وہ ہے:http://127.0.0.1:8088?num=123، اور پیرامیٹر کی طرف سے منتقل کال بیک پروسیسنگ تقریبhandlerواپسی"123"کبctx.query("num")کہا جاتا ہے.
  • ctx.rawQuery() ایچ ٹی پی پروٹوکول پر لاگو ہوتا ہے ، جب بلایا جاتا ہے تو ، درخواست میں اصل استفسار واپس کرتا ہے (ایچ ٹی پی کی درخواست کا استفسار) ۔
  • 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 (کوڈ) ایچ ٹی پی پروٹوکول پر لاگو ہوتا ہے ، ایچ ٹی پی پیغام کی حیثیت کا کوڈ مقرر کریں۔ عام طور پر ، ایچ ٹی پی کی حیثیت کا کوڈ روٹنگ برانچ کے اختتام پر مقرر کیا جاتا ہے۔ ڈیفالٹ ویلیو 200 ہے۔
  • ctx.remoteAddr() ایچ ٹی پی / ٹی سی پی پروٹوکول پر لاگو ہوتا ہے ، جب کال کیا جاتا ہے تو درخواست میں ریموٹ کلائنٹ ایڈریس اور پورٹ واپس کرتا ہے۔
  • ctx.localAddr() ایچ ٹی پی / ٹی سی پی پروٹوکول پر لاگو ہوتا ہے ، جب کال کی جاتی ہے تو سروس کا مقامی پتہ اور بندرگاہ واپس کرتا ہے۔
  • ctx.upgrade ((ویب ساکٹ) HTTP پروٹوکول کی بنیاد پر ویب ساکٹ پروٹوکول پر لاگو کیا، سوئچنگctxویب ساکٹ پروٹوکول میں سیاق و سباق کا اعتراض؛ اگر سوئچ کامیاب ہو تو ایک بولین ویلیو (سچ) ، اور اگر یہ ناکام ہو تو ایک بولین ویلیو (جھوٹا) لوٹاتا ہے۔
  • 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