کے__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
پیرامیٹر ایک سیاق و سباق کا اعتراض ہے جو مندرجہ ذیل طریقوں کے ساتھ ڈیٹا حاصل کرنے اور لکھنے کے لئے استعمال ہوتا ہے۔
- 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 ((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