দ্য__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 ((কি)
এইচটিটিপি প্রোটোকলে প্রয়োগ করা হয়, এটি কল করার সময় নির্দিষ্ট অনুরোধ শিরোনামে একটি কী মান ফেরত দেয়। উদাহরণস্বরূপ,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 ((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}
ইভেন্টলুপ _ জি