দ্য__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
প্যারামিটার হল একটি কনটেক্সট অবজেক্ট যা নিম্নলিখিত পদ্ধতির সাথে ডেটা পেতে এবং লিখতে ব্যবহৃত হয়ঃ
HTTP/1.1
, tcp
.http://127.0.0.1:8088?num=123
, এবং কলব্যাক প্রসেসিং ফাংশন প্যারামিটার দ্বারা পাসhandler
রিটার্ন"123"
কখনctx.query("num")
বলা হয়।User-Agent
বর্তমান আবেদনের শিরোনামেঃctx.header("User-Agent")
.GET
, POST
ইত্যাদি।ctx
ওয়েবসকেট প্রোটোকলের জন্য কনটেক্সট অবজেক্ট; যদি সুইচ সফল হয় তবে একটি বুলিয়ান মান (সত্য) এবং ব্যর্থ হলে একটি বুলিয়ান মান (মিথ্যা) ফেরত দেয়।read
পদ্ধতি সাধারণ HTTP প্রোটোকলে সমর্থিত নয়. আপনি টাইমআউট প্যারামিটার নির্দিষ্ট করতে পারেনtimeout_ms
মিলিসেকেন্ডে।JSON.stringify()
একটি স্ট্রিং মধ্যে JSON বস্তুর এনকোড এবং তারপর এটি লিখুন.WebSocket
প্রোটোকল, আপনি এই পদ্ধতি ব্যবহার করতে পারেন ক্লায়েন্টের কাছে এনকোডেড স্ট্রিং পাস করতে।{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}
ইভেন্টলুপ _ জি