রিসোর্স লোড হচ্ছে... লোডিং...

__ সার্ভ করুন

দ্য__Serveএইচটিটিপি পরিষেবা, টিসিপি পরিষেবা এবং ওয়েবসকেট পরিষেবা (এইচটিটিপি প্রোটোকলের উপর ভিত্তি করে) তৈরি করতে ফাংশন ব্যবহার করা হয়।

একটি স্ট্রিং ফেরত দেয় যা তৈরি পরিষেবার আইপি ঠিকানা এবং পোর্ট রেকর্ড করে। উদাহরণস্বরূপঃ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.
  • এইচটিটিপি প্রোটোকলserveURIপ্যারামিটার সেটিংস, যেমনঃhttp://127.0.0.1:6666?gzip=true; আপনি কম্প্রেশন সেটিংস সেট করতে পারেনঃgzip=true. দ্যserveURIএইচটিটিপিএস এর জন্য এই প্যারামিটার ব্যবহার করা হয়, যেমনhttps://127.0.0.1:6666?tls=true&gzip=true; আপনি যোগ করতে পারেনcert_pemএবংcert_key_pemসার্টিফিকেট লোড করার পরামিতি।

serveURI সত্য স্ট্রিং দ্যhandlerপ্যারামিটারটি রাউটিং প্রসেসিং ফাংশন (এইচটিটিপি প্রোটোকল), বার্তা প্রসেসিং ফাংশন (টিসিপি প্রোটোকল) এবং স্ট্রিম প্রসেসিং ফাংশন (ওয়েবসকেট) এ পাস করতে ব্যবহৃত হয়। প্যারামিটার দ্বারা পাস করা কলব্যাক ফাংশন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কলব্যাক ফাংশনে পাস।

আরজি মিথ্যা 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
  • এই ফাংশনটি শুধুমাত্র জাভাস্ক্রিপ্ট ভাষা কৌশল সমর্থন করে।
  • সার্ভিস থ্রেডটি গ্লোবাল স্কোপ থেকে বিচ্ছিন্ন, তাই এটি বন্ধ বা বাহ্যিক ভেরিয়েবল, কাস্টম ফাংশন ইত্যাদির উল্লেখ সমর্থন করে না; তবে এটি সমস্ত প্ল্যাটফর্ম এপিআই ফাংশন কল করতে পারে।
  • দ্যWebsocketএইচটিটিপি প্রোটোকলের উপর ভিত্তি করে পরিষেবাটি বাস্তবায়িত হয়। আপনি পাথে একটি রাউটিং শাখা সেট করতে পারেন এবং এর জন্য বাস্তবায়ন কোড ডিজাইন করতে পারেনWebsocketআপনি এই বিভাগে নমুনা কোডটি দেখতে পারেন।

প্যারামিটার দ্বারা পাস করা কলব্যাক ফাংশনhandlerএকটি পায়ctxপ্যারামিটার।ctxপ্যারামিটার হল একটি কনটেক্সট অবজেক্ট যা নিম্নলিখিত পদ্ধতির সাথে ডেটা পেতে এবং লিখতে ব্যবহৃত হয়ঃ

  • ctx.proto (() Http/TCP প্রোটোকলে প্রয়োগ করা হয়, কল করার সময় প্রোটোকলের নাম ফেরত দেয়। উদাহরণস্বরূপঃHTTP/1.1, tcp.
  • ctx.host() এইচটিটিপি প্রোটোকলে প্রয়োগ করা হলে, এটি আইপি ঠিকানা এবং পোর্ট কল করার সময় হোস্ট তথ্য ফেরত দেয়।
  • ctx.path (() এইচটিটিপি প্রোটোকলে প্রয়োগ করা হয়, যখন কল করা হয় তখন অনুরোধ পথটি ফেরত দেয়।
  • ctx.query ((key) এইচটিটিপি প্রোটোকলে প্রয়োগ করা হয়, যখন অনুরোধ করা হয় তখন অনুরোধে ক্যোয়ারিতে কীটির সাথে সম্পর্কিত মান প্রদান করে। উদাহরণস্বরূপ, পাঠানো অনুরোধটি হলঃhttp://127.0.0.1:8088?num=123, এবং কলব্যাক প্রসেসিং ফাংশন প্যারামিটার দ্বারা পাসhandlerরিটার্ন"123"কখনctx.query("num")বলা হয়।
  • ctx.rawQuery (() এইচটিটিপি প্রোটোকলে প্রয়োগ করা হয়, যখন কল করা হয়, তখন অনুরোধে মূল ক্যোয়ারী (এইচটিটিপি অনুরোধের ক্যোয়ারী) ফিরিয়ে দেয়।
  • ctx.headers ((() এইচটিটিপি প্রোটোকলে প্রয়োগ করা হয়, এবং যখন কল করা হয় তখন অনুরোধে অনুরোধ শিরোনামের তথ্য ফেরত দেয়।
  • ctx.header ((key)) এইচটিটিপি প্রোটোকলে প্রয়োগ করা হয়, এটি কল করার সময় নির্দিষ্ট অনুরোধ শিরোনামে একটি কী মান ফেরত দেয়। উদাহরণস্বরূপ,User-Agentবর্তমান আবেদনের শিরোনামেঃctx.header("User-Agent").
  • ctx.method (() এইচটিটিপি প্রোটোকলে প্রয়োগ করা হয়, কল করার সময় অনুরোধ পদ্ধতি ফেরত দেয়, যেমনGET, POSTইত্যাদি।
  • ctx.body ((() Http প্রোটোকলের POST অনুরোধে প্রয়োগ করা হয়, এবং যখন কল করা হয় তখন অনুরোধের দেহটি ফেরত দেয়।
  • ctx.setHeader ((কী, মান) উত্তর বার্তার অনুরোধ শিরোনাম তথ্য সেট করতে HTTP প্রোটোকলে প্রয়োগ করা হয়।
  • ctx.setStatus ((কোড) এইচটিটিপি প্রোটোকলে প্রয়োগ করা হয়, এইচটিটিপি বার্তার স্থিতি কোড সেট করুন। সাধারণত, এইচটিটিপি স্থিতি কোডটি রাউটিং শাখার শেষে সেট করা হয়। ডিফল্ট মানটি 200।
  • ctx.remoteAddr ((() Http/TCP প্রোটোকলে প্রয়োগ করা হয়, যখন কল করা হয় তখন রিমোট ক্লায়েন্টের ঠিকানা এবং অনুরোধে পোর্ট ফেরত দেয়।
  • ctx.localAddr() এইচটিটিপি/টিসিপি প্রোটোকলে প্রয়োগ করা হয়, যখন কল করা হয় তখন স্থানীয় ঠিকানা এবং পরিষেবাটির পোর্ট ফেরত দেয়।
  • ctx.upgrade ((websocket) 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}

ইভেন্টলুপ _ জি