Syntax | سینتکس
前往频道在 Telegram
Focus: Web Lan: Python & Go Website: https://syntaxfa.ir Quick connect: https://quick-connect.syntaxfa.ir Github: https://github.com/syntaxfa Group: https://t.me/Syntax_fa_group
显示更多2 984
订阅者
+724 小时
+137 天
+3230 天
帖子存档
2 987
آخرین خواسته مرحوم قبل مرگش این بود که تاریخچه سرچ های مرورگرش پاک بشه.
نمونه ای از سرچاش:
- اگه من دوبار ویندوز ۳۲ بیت نصب کنم، ۶۴ بیت میشه؟
- چجوری میتونم اینترنتو توی یه درایو بریزم تا بتونم از محل کار ببرمش خونه؟
- چرا میگن از دکمه خاموش روشن کردن لپتاپ. فقط واسه روشن کردن لپتاپ استفاده کنیم؟
- چرا برنامه نویسا سینگل هستن؟
- چجوری میتونم اکانت فیبسوک دوست دختر سابقمو با html هک کنم؟
- این دکمه any key کدوم دکمه کیبورده؟
#Fun
@Syntax_fa
2 987
پروکسی (proxy) چیه و به چه دردی میخوره
امروز میخوایم راجع به یه موضوع خیلی پرکاربرد و مهم حرف بزنیم: پروکسی (Proxy).
شاید براتون سوال باشه که پروکسی چیه و دقیقاً چه کاری انجام میده؟ 🤔
بیاید باهم بیشتر بررسی کنیم.
پروکسی یعنی چی؟ 🤷♂️
پروکسی یه نوع واسطهست که بین دستگاه شما (مثلاً کامپیوتر یا موبایلتون) و اینترنت قرار میگیره. وقتی از پروکسی استفاده میکنید، درخواستهاتون (مثل وقتی یه سایت رو باز میکنید) اول به سرور پروکسی میره و بعد از اونجا به مقصد اصلی (یعنی همون سایت) فرستاده میشه. به همین خاطر، سایت مقصد هیچوقت نمیفهمه شما دقیقاً از کجا بهش وصل شدید، چون فقط آیپی سرور پروکسی رو میبینه 😎
پروکسی چه کاربردهایی داره؟ 🤓
دور زدن محدودیتها 🚫:
یکی از معروفترین کاربردهای پروکسی اینه که میتونید باهاش فیلترها و محدودیتهای اینترنتی رو دور بزنید. مثلاً اگه سایتی تو کشور ما فیلتر باشه، ( که ماشالله همه چی فیلتره) میتونید با استفاده از یه پروکسی از کشوری دیگه به اون سایت دسترسی پیدا کنید.
مخفی کردن هویت شما 👻:
همونطور که گفتم، وقتی از پروکسی استفاده میکنید، آیپی شما مخفی میشه و سایت مقصد آیپی پروکسی رو میبینه. این یعنی میتونید تو اینترنت ناشناستر بچرخید و حریم خصوصیتون رو حفظ کنید.
افزایش امنیت 🔒:
بعضی پروکسیها با استفاده از پروتکلهای امنیتی مثل HTTPS، اطلاعات شما رو رمزنگاری میکنن تا هکرها و جاسوسها نتونن به راحتی به دادههاتون دسترسی پیدا کنن.
مدیریت پهنای باند 📊:
توی شبکههای بزرگ (مثلاً تو شرکتها)، مدیران شبکه میتونن از پروکسی برای مدیریت پهنای باند استفاده کنن. اینطوری میتونن ترافیک اینترنت رو کنترل کنن و استفاده از منابع رو بهینه کنن.
انواع پروکسی 🌐
HTTP Proxy:
این نوع پروکسی فقط درخواستهای HTTP رو هندل میکنه. یعنی وقتی شما یه سایت رو با مرورگر باز میکنید، درخواست شما از طریق این پروکسی عبور میکنه. اما این نوع پروکسی نمیتونه درخواستهای
غیر HTTP (مثلاً FTP) رو پشتیبانی کنه.
SOCKS Proxy 🧦:
این یکی از همه خفن تره و تقریباً هر نوع ترافیکی رو پشتیبانی میکنه. میتونید ازش برای ارسال ایمیل، دانلود فایل یا حتی بازیهای آنلاین استفاده کنید. اما باید بدونید که SOCKS پروکسی بهخودیخود اطلاعات رو رمزنگاری نمیکنه و فقط ترافیک رو هدایت میکنه.
Transparent Proxy (پروکسی شفاف) 🛠️:
این نوع پروکسی بدون اینکه شما متوجه بشید، درخواستهاتون رو هدایت میکنه. معمولاً مدیران شبکه یا ارائهدهندگان اینترنت از این نوع پروکسی استفاده میکنن تا ترافیک رو مانیتور یا فیلتر کنن.
Reverse Proxy (پروکسی معکوس) 🔄:
این نوع پروکسی برعکس بقیهست. یعنی به جای اینکه درخواستهای شما رو به اینترنت بفرسته، درخواستهای اینترنت رو به سرورهای داخلی هدایت میکنه. معمولاً برای توزیع بار سرور یا افزایش امنیت سرورها از این مدل استفاده میشه.
مزایا و معایب پروکسی 💡❌
مزایا ✅:
مخفی کردن هویت و آیپی شما
دور زدن محدودیتها و فیلترینگ
مدیریت بهتر پهنای باند تو شبکهها
افزایش امنیت و حفظ حریم خصوصی
معایب ⭕:
بعضی از پروکسیها اطلاعات رو رمزنگاری نمیکنن، پس همچنان امکان لو رفتن اطلاعات وجود داره.
پروکسیهای رایگان معمولاً سرعت پایینی دارن و قابل اعتماد نیستن.
اگه درست تنظیم نشن، میتونن باعث کاهش کارایی و سرعت اینترنت بشن.
جمعبندی 🎯
در کل، پروکسی یه ابزار خیلی کاربردیه که میتونه به شما کمک کنه به اینترنت آزادتر دسترسی داشته باشید، هویتتون رو مخفی کنید و امنیتتون رو افزایش بدید. ولی باید همیشه حواستون باشه که از پروکسی مطمئن و ایمن استفاده کنید، مخصوصاً اگه به حریم خصوصی و امنیتتون اهمیت میدید.
لینک:
https://t.me/ninja_learn_ir
#proxy
@Syntax_fa
2 987
Consumer data platform
بیاید یه سناریو رو بریم جلو:
تو مرورگرتون درباره لپتاپ سرچ میکنید.
قصد دارید بخرید پس بیشتر سرچ میکنید و مدل های مختلف رو باهمدیگه بررسی میکنید.
بعد حالا بر اساس قیمت سرچ میکنید تا یچیز اقصادی پیدا کنید.
چند وقت بعد میبینید یه ایمیل با این موضوع دریافت کردید:
لیست بهترین لپتاپ ها با قیمت مناسب در دیجیکالا
همه اینا با استفاده از Customer data platform(CDP) انجام میشه.
تو این وب سایت میتونید دربارش اطلاعات بیشتری بدست بیارید:
https://revium.com.au/blog/what-is-segment-cdp
#CDP
@Syntax_fa
2 987
برنامه نویسا تو تایم بیکاریشون چیکار میکنن:
داشتم تو وب سایت شهوانی دنبال یه سری داستان های آموزنده میگشتم و پیدا نمیکردم، تصمیم گرفتم بیام یه کراولر بنویسم و داستانارو توی الستیک ایندکس کنم تا بتونم با یه سرچ پیشرفته، هر داستانی که میخوامو به راحتی پیداش کنم.
(از زبون دوست عزیزمون که اینو نوشته گفتم)
#fun
@Syntax_fa
2 987
+4
نحوه راه اندازی یه GitHub codespaces:
خب خیلی سادس:
۱. رو codespaces کلیک میکنید
۲. بعد روی new codespaces
۳. تو این بخش مشخص میکنید میخواید برای کدوم ریپوزیتوری codespace رو بسازید و ریجن سرورش چی باشه و منابع چقدر داشته باشه. یه نکته رو دقت کنید. بصورت ماهانه تو پلن رایگان فقط پونزده گیگ میتونید فایل و ... رو تو codespace هاتون استفاده کنید. همچنین 120 ساعت در ماه از cpu تو پلن رایگان میتونید استفاده کنید که این رو درست متوجه نشدم. فکر کنم منظورش اکتیو بودن codespace هستش.
۴. بعد اینکه روی create codespace کلیک کردید یکم طول میکشه ساخته شه. بهتره از شکنی چیزی استفاده کنید در غیر اینصورت ممکنه درست اجرا نشه.
۵. بعد اینکه وارد محیط codespace شدید میتونید به راحتی با داکر سرویس هاتونو بالا بیارید و پروژتون رو پشت یه پورتی اجرا کنید. Codespace به شما اجازه میده که یه tpc connection رو باز کنید و بهش از طریق اینترنت دسترسی داشته باشید.
همچنین اگه پروژه پرایوت هستش میتونید بصورت پرایوت دسترسی بدید تا هرکی به پروژه دسترسی دارن بتونن ببینن یا اینکه بصورت public اجازه بدید تا همه بتونن دسترسی داشته باشن.
#github #codespace
@Syntax_fa
2 987
آشنایی با GitHub Codespaces
تو دنیای مدرن توسعه نرم افزار امروزی، سهولت و سرعت تو راهاندازی محیطهای توسعه اهمیت زیادی داره. GitHub Codespaces یکی از ابزارهای نوآورانهای هستش که به برنامهنویسا اجازه میده تا بتونن همه جا به راحتی به پروژه هاشون دسترسی داشته باشن، اجراشون کنن و به راحتی تو یه محیط ابری کدهاشون رو تغییر بدن.
همچنین codespaces بطور کامل روی GitHub ادغام شده که همین یکی از مزیت های بزرگشه.
چند تا از ویژگی هاش:
۱. از ویرایشگرهای مختلف از جمله Visual Studio Code و فکر کنم Jetbarins پشتیبانی میکنه.
۲. مثل یک محیط توسعه که روی سیستم خودتون نصبه، میتونید سفارش سازی کنید
۳. به تیمها این امکانو میده که به راحتی با همدیگه همکاری کنن.
۴.از اونجا که codespaces یک محیط ابری در اختیار شما قرار میده، میتونید از هر نقطه بهش دسترسی داشته باشید.
فرض کنید به سیستمون دسترسی ندارید و حالا نیازه یه سری باگ هارو رفع کنید. کافیه وارد محیط codespaces بشید، تغییرات رو بدید بعد کدتون رو تو codespaces ران و تست کنید.
این قابلیت هاشو من خیلی دوست داشتم:
۱. بهتون پلن رایگان میده که برای استفاده شخصی فکر میکنم کافیه
2 بهتون چیزی شبیه به یه سرور مجازی میده که منابع کمی هم نداره تو پلن رایگانش میتونید تا 4 هسته و 16 گیگ رم استفاده کنید.
3. از داکر و یا چیز های مختلف دیگه ای که نیاز دارید هم میتونید استفاده کنید.
4. میتونید پروژتون رو روی یه پورتی اجرا کنید و دسترسی پرایوت یا پابلیک بدید تا از طریق اینترنت بهش دسترسی داشته باشید. برای ران کردن نمونه کارا خوبه.
و ...
هنوز زیاد ازش استفاده نکردم. نحوه اجرا کردنش خیلی سادس ولی اگه خواستید توضیح میدم
#github #codespaces
@Syntax_fa
2 987
سرور های قدرتمند ایران:
۱. با latency زیر ده ثانیه
۲. پهنای باند باور نکردنیه پنجاه مگابایت
۴. دسترسی به اینترنت داخلی
۵. اینترنت نامحدود با طرح مصرف منصفانه
۶. قیمت ها کاملا اقتصادی
و کلی ویژگی دیگر
2 987
ما تو فکر چی هستیم، بقیه تو فکر چی هستن 🙂
تا حالا به این فکر کردی که response time سیستم ت در حد میکروثانیه باشه؟ مثلا به میلی ثانیه و اینا نرسه اصلا؟
احتمالا تو نسل بعدی دیتاسنترها بیشتر میشنویم ازشون
https://x.com/petereliaskraft/status/1830294745563951329?t=LxJ9z3qlt7uREui7hUCAyg&s=35
Shenango: Achieving High CPU Efficiency for Latency-sensitive Datacenter Workloads
https://www.usenix.org/conference/nsdi19/presentation/ousterhout
Source
@Syntax_fa
2 987
و اما Docekrfile که من از توضیحات ایشون رسیدم بهش:
FROM python:3.11-slim as builder
# avoid stuck build due to user prompt
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends ...
# create and activate virtual environment
RUN python -m venv /home/myuser/venv
ENV PATH="/home/myuser/venv/bin:$PATH"
# install requirements
COPY ./requirements .
RUN pip3 install --upgrade --no-cache-dir pip
RUN pip3 install --no-cache-dir wheel
RUN pip3 install --no-cache-dir -r production.txt
FROM python:3.11-slim
RUN useradd --create-home myuser
COPY --from=builder /home/myuser/venv /home/myuser/venv
USER myuser
RUN mkdir /home/myuser/code
WORKDIR /home/myuser/code
COPY . /home/myuser/code
EXPOSE $DJANGO_PORT
# make sure all messages always reach console
ENV PYTHONUNBUFFERED=1
# activate virtual environment
ENV VIRTUAL_ENV=/home/myuser/venv
ENV PATH="/home/myuser/venv/bin:$PATH"
# /dev/shm is mapped to shared memory and should be used for gunicorn heartbeat
# this will improve performance and avoid random freezes
# CMD ["gunicorn","-b", "0.0.0.0:8000", "-w", "4", "-k", "gevent", "--worker-tmp-dir", "/dev/shm", "--chdir", "config config.wsgi:application"]
نظر بدید
#python #dockerfile
@Syntax_fa2 987
یک مقاله درباره تفاوت بین stateless و stateful بودن
https://medium.com/@saeidlaalkaei/stateful-and-stateless-sets-across-different-technologies-5ad1d06caf98
اهمیت Stateless در برنامههای Cloud Native
یکی از استانداردهای اصلی در طراحی برنامههای کلاد نیتیو Stateless بودن آنها است. دلایل این موضوع به شرح زیر است:
1. مقیاسپذیری آسان: برنامههای Stateless به راحتی میتوانند در محیطهای ابری مقیاسپذیر شوند. به دلیل عدم وابستگی به وضعیت، میتوان به سادگی تعداد نمونههای برنامه را افزایش یا کاهش داد.
مثلا فرض کنید ما اومدیم یدونه لیمیت بر اساس ip address کاربر درست کردیم که توی یک مپ داخل برناممون ذخیرش کردیم. خب در این شرایط وقتی instance برناممون رو بیشتر کنیم چه اتفاقی برای لیمیتی که نوشتیم میوفته؟ stateless بودن این دغدغه هارو حذف میکنه.
2. مدیریت بهتر منابع: در برنامههای Stateless، منابع به راحتی میتوانند بین نمونههای مختلف توزیع شوند، زیرا هر نمونه هیچگونه وابستگی به دیگر نمونهها ندارد.
3. قابلیت تحمل خطا: اگر یک نمونه از برنامه به هر دلیلی دچار مشکل شود، میتوان به سرعت آن را جایگزین کرد بدون اینکه تأثیری بر روی وضعیت کاربران دیگر داشته باشد.
4. استقرار سریعتر: در محیطهای ابری، زمان استقرار بسیار مهم است. برنامههای Stateless به دلیل سادگی و عدم نیاز به ذخیره وضعیت، سریعتر میتوانند مستقر شوند.
#stateless #stateful
@Syntax_fa
2 987
برنامهنویسهای ادایی: قهرمانان سلفیگیر! 🤓
برنامهنویسهای ادایی، آن دسته از افراد در دنیای فناوری هستند که بیشتر از اینکه به کدنویسی بپردازند، به گرفتن سلفیهای خفن با لپتاپ و قهوهشان مشغولاند. بیایید نگاهی به دنیای رنگارنگ آنها بندازیم!
سلفیهای جذاب با لپتاپ
اولین نشانهی برنامهنویس ادایی، سلفیهای بینظیرش است. این افراد بهطور مداوم در حال گرفتن عکس از خود در کنار لپتاپ و کتابهای مهندسی نرمافزار هستند. شاید فکر کنید که آنها در حال کدنویسی هستند، اما واقعیت این است که در حال تنظیم نور و زاویه دوربین برای گرفتن عکس بعدیشان هستند!
"نگاه کن من دارم کد میزنم"
در واقع، آنها فقط در حال چک کردن فید اینستاگرامشان هستند!
بحث درباره clean architecture همه جا!
همیشه همراه خود کتاب های برنامه نویسی خفن را حمل میکنند حتی در کافه و مهمانی ها!
تا بحث درباره برنامه نویسی شود، کتاب های که درباره clean architecture و ddd و ... خوانده اند صحبت میکنند اما هنوز نمیتوانند یک پروژه todo را با ساختار مناسب پیاده سازی کنند!
میز کار به سبک هنری 😀
میز کار این برنامهنویسها مثل یک گالری هنری است؛ قهوهساز، کتابهای مهندسی نرمافزار، و چندین ماگ با نوشتههای خندهدار. آنها با افتخار به شما نشان میدهند که "این کتاب رو تازه خریدم!" در حالی که هیچوقت حتی یک صفحه از آن را نخواندهاند. گویی که داشتن کتابهای مهندسی نرمافزار بهعنوان یک اکسسوری مهم است!
پوششهای خاص با تیشرتهای برنامهنویسی 😀
این افراد معمولاً تیشرتهای با طرحهای مرتبط با برنامهنویسی میپوشند، مثل "Code is my cardio" یا "I'm silently correcting your code". گویی لباسشان بهترین بیانیهی حرفهای آنهاست!
رویدادهای کافهای ☕️
برنامهنویسهای ادایی معمولاً در کافهها جمع میشوند تا نمیدونم واقعا چیکار کنن ☹️
بحثهای پرشور درباره buzzword ها
وقتی دو برنامهنویس ادایی با هم ملاقات میکنند، یک بحث پرشور درباره جدیدترین فریمورکها یا زبانهای برنامهنویسی شروع میشود. در واقع، این بحثها بیشتر شبیه به مسابقهی خودستایی است تا تبادل دانش واقعی!
اوه از همه بدتر وقتی با یه برنامه نویس ادایی صحبت میکنید کلمات و اصطلاحاتی رو بکار میبره که خداهم تاحالا نشنیده!
بازورد چیه؟ #buzzword
مبادا مثل آدم کد بزنی!
کد های یک برنامه نویس ادایی رو فقط یک برنامه نویس ادایی دیگه میفهمه!
تا جای ممکن سعی میکنن کدی بنویسن که پیچیده و غیرقابل فهم باشه.
چیزی که فکر میکنن:
پشمام چه کدی زدی😱
ولی واقعیت موضوع:
این چه کدشریه دیگه😒
#fun
@Syntax_fa
2 987
نحوه احراز هویت با OAuth
OAuth
یک پروتکل احراز هویت و مجوز است که به کاربران اجازه میدهد بدون نیاز به اشتراکگذاری اطلاعات ورود خود، به وبسایتها و اپلیکیشنهای مختلف دسترسی پیدا کنند. این پروتکل معمولاً در سه مرحله اصلی کار میکند:
1. درخواست مجوز: کاربر به اپلیکیشن شما اجازه میدهد به حساب کاربریاش در سرویسدهنده (مثل گوگل) دسترسی پیدا کند.
2. دریافت توکن دسترسی: پس از تأیید مجوز کاربر، اپلیکیشن شما یک توکن دسترسی (Access Token) دریافت میکند.
3. دسترسی به منابع: با استفاده از توکن دسترسی، اپلیکیشن شما میتواند به منابع کاربر دسترسی پیدا کند.
مراحل لاگین با اکانت گوگل
1. ثبتنام اپلیکیشن در کنسول گوگل
ابتدا باید اپلیکیشن خود را در https://console.cloud.google.com/. در اینجا ثبت کنید:
- یک پروژه جدید ایجاد کنید.
- OAuth 2.0 client ID ایجاد کنید.
- URL کال بک (Redirect URI) را مشخص کنید.
پس از این مراحل، یک
Client ID و Client Secret دریافت خواهید کرد.
2. درخواست مجوز
هنگامی که کاربر روی دکمه "ورود با گوگل" کلیک میکند، شما باید او را به URL زیر هدایت کنید:
https://accounts.google.com/o/oauth2/v2/auth?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code&scope=email%20profile
در اینجا:
- YOUR_CLIENT_ID: شناسه کلاینت شما
- YOUR_REDIRECT_URI: URL کال بک شما
- scope: اطلاعاتی که میخواهید از کاربر بگیرید (مثل ایمیل و پروفایل)
3. دریافت کد تأیید
پس از اینکه کاربر مجوز را تأیید کرد، گوگل کاربر را به URL کال بک شما باز میگرداند و یک پارامتر code به همراه خواهد داشت.
4. تبادل کد برای توکن دسترسی
شما باید یک درخواست POST به URL زیر ارسال کنید تا کد را برای توکن دسترسی مبادله کنید:
POST https://oauth2.googleapis.com/token
بدنه درخواست باید شامل موارد زیر باشد:
{
"code": "CODE_RECEIVED_FROM_GOOGLE",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET",
"redirect_uri": "YOUR_REDIRECT_URI",
"grant_type": "authorization_code"
}
5. دریافت توکن دسترسی
اگر درخواست موفق باشد، شما یک پاسخ JSON دریافت میکنید که شامل access_token و اطلاعات دیگر است.
6. احراز هویت و دسترسی به اطلاعات کاربر
با استفاده از `access_token`، میتوانید اطلاعات کاربر را از API گوگل دریافت کنید. برای مثال:
GET https://www.googleapis.com/oauth2/v2/userinfo
Authorization: Bearer ACCESS_TOKEN
7. وریفای توکن
برای اطمینان از صحت توکن، میتوانید توکن را به یکی از انتهای API گوگل ارسال کنید تا اطلاعات مربوط به توکن و اعتبار آن را دریافت کنید.
#oauth
@Syntax_fa2 987
بیاین یه چالش بزنیم ببینیم کی اطلاعاتش بیشتره
قوانین بازی:
تعداد سوال: ۵ عنوان
درجه سختی سوالات: سخت
⏱هر سوال فقط ۲۰ ثانیه فرصت پاسخ داره
پاسخ سریعتر 👈 امتیاز (❣️) بیشتر
👥 کی پایه ست؟ (بروزرسانی هر ۵ ثانیه)
2 987
استخدام شدن برنامه نویسا تو سال 2020:
تسلط به روشن و خاموش کردن سیستم. بقیه چیزا مهم نیست خودمون بهت یاد میدیم 🎉
استخدام شدن برنامه نویسا تو سال 2024:
😥😳
#fun
@Syntax_fa
2 987
چند نکته درباره وب سوکت و توضیح ساده برای درک بهتر
فرآیند ارتباط وبسوکت
1. شروع با HTTP/HTTPS:
- کلاینت ابتدا یک درخواست HTTP به سرور میفرستد. این درخواست شامل هدرهای خاصی است که نشاندهنده تمایل به ارتقاء ارتباط به وبسوکت است. این هدرها شامل موارد زیر هستند:
-
Upgrade: websocket
- Connection: Upgrade
2. ارتقاء به وبسوکت:
- سرور درخواست را دریافت کرده و بررسی میکند. اگر شرایط درست باشد، با یک پاسخ خاص به کلاینت، ارتباط را به وبسوکت ارتقاء میدهد. این پاسخ شامل وضعیت 101 Switching Protocols است.
3. استفاده از ws:// و wss://:
- پس از ارتقاء، ارتباط بهصورت دائمی و دوطرفه برقرار میشود.
- ws://
نشاندهنده استفاده از پروتکل وبسوکت بر روی HTTP است.
- wss://
نشاندهنده استفاده از پروتکل وبسوکت بر روی HTTPS است (که رمزنگاری شده است).
چرا ws:// استفاده میشود؟
- ws://localhost:8080
- این URL نشان میدهد که ارتباط نهایی بهصورت وبسوکت انجام میشود.
نکته:
در HTTP/2، مکانیزم آپگرید به وبسوکت از طریق هدرهای HTTP/1.1 استفاده نمیشود. HTTP/2 به صورت ذاتی از این روش پشتیبانی نمیکند. برای ارتباط وبسوکت در HTTP/2، معمولاً از HTTP/1.1 برای ایجاد و ارتقاء ارتباط استفاده میشود یا از روشهای دیگری برای مدیریت ارتباطات بلادرنگ بهره میگیرند.
روشهای دیگه برای مدیریت ارتباطات بلادرنگ:
1. Server-Sent Events (SSE):
- یک ارتباط یکطرفه است که سرور میتواند بهطور پیوسته دادهها را به کلاینت ارسال کند.
- مناسب برای برنامههایی که نیاز به ارسال دادههای بلادرنگ از سرور به کلاینت دارند.
2. Long Polling:
- کلاینت یک درخواست HTTP ارسال میکند و سرور تا زمانی که دادهای برای ارسال وجود ندارد، پاسخ را معلق نگه میدارد(یک تایم اوت مشخص هم دارد مثلا 20 ثانیه)
- پس از ارسال داده، کلاینت بلافاصله یک درخواست جدید ارسال میکند.
3. HTTP/2 Streams:
- استفاده از قابلیت چندپخشی و استریمهای همزمان در HTTP/2 برای ارسال و دریافت دادههای بلادرنگ.
4. gRPC:
- یک فریمورک RPC بر پایه HTTP/2 که از ارتباطات بلادرنگ و استریمینگ پشتیبانی میکند.
چرا نیاز به درخواست HTTP اولیه است؟
وبسوکتها بهعنوان یک پروتکل ارتقاء بر روی HTTP طراحی شدهاند تا با زیرساختهای موجود وب سازگار باشند. این امر به کلاینتها و سرورها اجازه میدهد تا از همان پورتها و مکانیزمهای امنیتی استفاده کنند.
مثال در گولنگ:
package main
import (
"fmt"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
// checking conditions
return true
},
}
func handleConnections(w http.ResponseWriter, r *http.Request) {
// upgrade http request to websocket
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
fmt.Println(err)
return
}
defer ws.Close()
// messages
for {
messageType, msg, err := ws.ReadMessage()
if err != nil {
fmt.Println(err)
break
}
fmt.Printf("Received: %s\n", msg)
err = ws.WriteMessage(messageType, msg)
if err != nil {
fmt.Println(err)
break
}
}
}
func main() {
http.HandleFunc("/", handleConnections)
fmt.Println("Server started on :8080")
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println("Error starting server:", err)
}
}
#websocket
@Syntax_fa
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
