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