تی سی پی شبکه net/tcp
سرور و کارخواه TCP: گوش دادن، وصل شدن، خواندن و نوشتن، TLS و استخر اتصال.
واردسازی شبکه.تی سی پی شبکه
TCP پایهی بیشتر پروتکلهای اینترنت است: یک جریان مطمئن و مرتب از بایتها میان دو برنامه. سرور با پیوند روی یک درگاه گوش میدهد و با پذیرش هر کارخواه تازه را میگیرد؛ کارخواه با شماره گیری وصل میشود.
پذیرش و خواندن تا رسیدن داده صبر میکنند؛ برای کار با چند کارخواه، هر کدام را در یک نخ جدا (spawn) اداره کنید یا مهلت بگذارید. نمونهها روی 127.0.0.1 اجرا میشوند.
گونهها
سرور Server
ساختار سرور| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| fd | fd | صحیح۶۴ = -1 | شناسهی سوکت؛ -1 یعنی نامعتبر. |
| port | port | صحیح = 0 | درگاهی که سرور روی آن گوش میدهد. |
واردسازی شبکه.تی سی پی شبکه
ناپایا سرور := تی سی پی شبکه.سرور {}
روال پاسخگو():
ا := تی سی پی شبکه.پذیرش(سرور)
پیام := تی سی پی شبکه.خواندن(ا، ۱۰۲۴)
_ := تی سی پی شبکه.نوشتن(ا، "پژواک: " + پیام)
تی سی پی شبکه.بستن(ا)
پایان
روال ریشه:
سرور = تی سی پی شبکه.پیوند(۰)
سرچاپ تی سی پی شبکه.معتبر(سرور)، تی سی پی شبکه.درگاه(سرور) > ۰
ن := spawn(پاسخگو)
ا := تی سی پی شبکه.شماره گیری("127.0.0.1"، تی سی پی شبکه.درگاه(سرور))
سرچاپ تی سی پی شبکه.اتصال معتبر(ا)
تی سی پی شبکه.تنظیم مهلت(ا، ۲۰۰۰)
تی سی پی شبکه.تنظیم زندهنگهداری(ا، درست)
تی سی پی شبکه.غیرفعالسازی نگل(ا، درست)
سرچاپ تی سی پی شبکه.نوشتن(ا، "سلام")
سرچاپ تی سی پی شبکه.خواندن(ا، ۱۰۲۴)
تی سی پی شبکه.بستن(ا)
join(ن)
تی سی پی شبکه.بستن سرور(سرور)
سرچاپ تی سی پی شبکه.اتصال معتبر(تی سی پی شبکه.شماره گیری("127.0.0.1"، ۱))
پایاناتصال شبکه Conn
ساختار اتصال شبکه| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| fd | fd | صحیح۶۴ = -1 | شناسهی سوکت؛ -1 یعنی نامعتبر. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
مدخل استخر PoolEntry
ساختار مدخل استخر| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| key | key | رشته = "" | میزبان و درگاه. |
| conn | conn | اتصال شبکه | اتصال. |
| put_at_ms | put_at_ms | صحیح۶۴ = 0 | زمان برگرداندن به استخر. |
واردسازی شبکه.تی سی پی شبکه
روال ریشه:
س := تی سی پی شبکه.پیوند(۰)
درگاه := تی سی پی شبکه.درگاه(س)
ناپایا استخر := تی سی پی شبکه.استخر جدید()
ا := تی سی پی شبکه.دریافت اتصال(استخر، "127.0.0.1"، درگاه، ۱۰۰۰)
سرچاپ تی سی پی شبکه.اتصال معتبر(ا)، تی سی پی شبکه.تعداد استخر(استخر)
تی سی پی شبکه.بازگرداندن اتصال(استخر، "127.0.0.1"، درگاه، ا، ۱۰۰۰)
سرچاپ تی سی پی شبکه.تعداد استخر(استخر)
دوباره := تی سی پی شبکه.دریافت اتصال(استخر، "127.0.0.1"، درگاه، ۲۰۰۰)
سرچاپ دوباره.fd == ا.fd، تی سی پی شبکه.تعداد استخر(استخر)
تی سی پی شبکه.بازگرداندن اتصال(استخر، "127.0.0.1"، درگاه، دوباره، ۲۰۰۰)
تازه := تی سی پی شبکه.دریافت اتصال(استخر، "127.0.0.1"، درگاه، ۲۰۰۰ + استخر.idle_ttl_ms + ۱)
سرچاپ تی سی پی شبکه.اتصال معتبر(تازه)، تی سی پی شبکه.تعداد استخر(استخر)
تی سی پی شبکه.بستن(تازه)
تی سی پی شبکه.بستن سرور(س)
پایانمدخلهای استخر PoolEntries
ساختار مدخلهای استخر| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| items | items | وکتور<مدخل استخر> | اتصالها. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam
استخر اتصال Pool
ساختار استخر اتصال| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| entries | entries | مدخلهای استخر | اتصالهای بیکار. |
| idle_ttl_ms | idle_ttl_ms | صحیح۶۴ = 30000 | بیشترین زمانی که اتصال بیکار نگه داشته میشود؛ پیشفرض ۳۰ ثانیه. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam
روالها
پیوند Bind
روال پیوند(port: صحیح): سرورنمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
معتبر Ok
روال معتبر(srv: سرور): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
درگاه Port
روال درگاه(srv: سرور): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
پذیرش Accept
روال پذیرش(srv: سرور): اتصال شبکهنمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
بستن سرور CloseServer
روال بستن سرور(srv: سرور)نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
اتصال معتبر ConnOk
روال اتصال معتبر(c: اتصال شبکه): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
خواندن Read
روال خواندن(c: اتصال شبکه، max: صحیح): رشتهmax بایت میخواند؛ اگر طرف دیگر اتصال را بسته باشد، رشتهی خالی.نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
نوشتن Write
روال نوشتن(c: اتصال شبکه، data: رشته): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
خواندن بایت ReadBytes
روال خواندن بایت(c: اتصال شبکه، buf: تهی*، max: صحیح): صحیحmax بایت را در حافظه میخواند و تعداد را برمیگرداند؛ صفر یا کمتر یعنی پایان یا خطا.واردسازی شبکه.تی سی پی شبکه
واردسازی حافظه
ناپایا سرور := تی سی پی شبکه.سرور {}
روال پاسخگو():
ا := تی سی پی شبکه.پذیرش(سرور)
تی سی پی شبکه.تنظیم مهلت خواندن(ا، ۲۰۰۰)
تی سی پی شبکه.تنظیم مهلت نوشتن(ا، ۲۰۰۰)
_ := تی سی پی شبکه.خواندن(ا، ۱۰۲۴)
تی سی پی شبکه.نوشتن اچ تی تی پی(ا، "200 OK"، "text/plain"، "سلام")
تی سی پی شبکه.بستن(ا)
پایان
روال ریشه:
سرور = تی سی پی شبکه.پیوند(۰)
ن := spawn(پاسخگو)
ا := تی سی پی شبکه.شماره گیری("127.0.0.1"، تی سی پی شبکه.درگاه(سرور))
درخواست := "GET / HTTP/1.0\r\n\r\n"
سرچاپ تی سی پی شبکه.نوشتن بایت(ا، درخواست برگردان تهی*، درخواست.طول())
ب := حافظه.تخصیص صفرشده(۲۵۶ برگردان طبیعی۶۴)
ناپایا جمع := ۰
تا درست:
ر := تی سی پی شبکه.خواندن بایت(ا، ب، ۲۵۵)
اگر ر <= ۰:
بشکن
پایان
جمع += ر
پایان
سرچاپ جمع > ۰
دوباره := تی سی پی شبکه.اتصال از توصیفگر(ا.fd)
سرچاپ دوباره.fd == ا.fd
تی سی پی شبکه.بستن(ا)
join(ن)
تی سی پی شبکه.بستن سرور(سرور)
حافظه.آزادسازی(ب)
پایاننوشتن بایت WriteBytes
روال نوشتن بایت(c: اتصال شبکه، ptr: تهی*، n: صحیح): صحیحn بایت از حافظه میفرستد.نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Bytes.salam
بستن Close
روال بستن(c: اتصال شبکه)نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
شماره گیری Dial
روال شماره گیری(host: رشته، port: صحیح): اتصال شبکهاتصال معتبر نادرست است.نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
شماره گیری امن DialTLS
روال شماره گیری امن(host: رشته، port: صحیح): tls.اتصال شبکهواردسازی شبکه.تی سی پی شبکه
واردسازی تی ال اس
روال ریشه:
_ := تی سی پی شبکه.شماره گیری امن("example.com"، ۴۴۳)
ساده := تی سی پی شبکه.شماره گیری("example.com"، ۴۴۳)
_ := تی سی پی شبکه.ارتقا به تی ال اس(ساده، تی ال اس.پیکربندی جدید("example.com"))
پایانارتقا به تی ال اس UpgradeTLS
روال ارتقا به تی ال اس(c: اتصال شبکه، cfg: tls.Config): tls.اتصال شبکهنمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-TLS.salam
اتصال از توصیفگر ConnFromFd
روال اتصال از توصیفگر(fd: صحیح۶۴): اتصال شبکهنمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Bytes.salam
نوشتن اچ تی تی پی WriteHTTP
روال نوشتن اچ تی تی پی(c: اتصال شبکه، status_line: رشته، content_type: رشته، body: رشته)Content-Length و Connection: close میفرستد؛ برای سرورهای خیلی ساده.نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Bytes.salam
تنظیم مهلت خواندن SetReadDeadline
روال تنظیم مهلت خواندن(c: اتصال شبکه، millis: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Bytes.salam
تنظیم مهلت نوشتن SetWriteDeadline
روال تنظیم مهلت نوشتن(c: اتصال شبکه، millis: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Bytes.salam
تنظیم مهلت SetDeadline
روال تنظیم مهلت(c: اتصال شبکه، millis: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
تنظیم زندهنگهداری SetKeepAlive
روال تنظیم زندهنگهداری(c: اتصال شبکه، enable: منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
غیرفعالسازی نگل SetNoDelay
روال غیرفعالسازی نگل(c: اتصال شبکه، enable: منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam
استخر جدید NewPool
روال استخر جدید(): استخر اتصالنمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam
دریافت اتصال Get
روال دریافت اتصال(p &: استخر اتصال، host: رشته، port: صحیح، now_ms: صحیح۶۴): اتصال شبکهnow_ms زمان فعلی است.نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam
بازگرداندن اتصال Put
روال بازگرداندن اتصال(p &: استخر اتصال، host: رشته، port: صحیح، c: اتصال شبکه، now_ms: صحیح۶۴)نمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam
تعداد استخر PoolLen
روال تعداد استخر(p: استخر اتصال): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam