Gopher Academy
3.34K subscribers
918 photos
40 videos
279 files
1.99K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
created an 'Advanced Go Driver' for Amazon RDS and Aurora

🟢 خلاصه مقاله:
این مقاله یک «درایور پیشرفته‌ی Go» برای Amazon RDS و Aurora معرفی می‌کند که به‌جای تغییر پروتکل‌ها، روی pgx (برای PostgreSQL) و درایور بومی MySQL سوار می‌شود و قابلیت‌های عملیاتی مهمی اضافه می‌کند. مهم‌ترین مزیت‌ها شامل ساده‌سازی احراز هویت با پشتیبانی از IAM و توکن‌های SigV4، مدیریت خودکار TLS و چرخش گواهی‌ها/اسرار، و تاب‌آوری در سوییچ‌اوور/فِیل‌اوور با تشخیص تغییرات DNS، اتصال مجدد شفاف و تکرار تراکنش‌-آگاه است. این درایور توپولوژی Aurora/RDS (نویسنده/خواننده) را می‌شناسد، برای بارهای فقط-خواندنی از ریدرها استفاده می‌کند و در صورت نیاز به نویسنده مهاجرت می‌کند. همچنین قلاب‌های مشاهده‌پذیری (لاگ/متریک/تریس)، پشتیبانی از context، سازگاری با database/sql و pgx، و پیکربندی ساده از طریق DSN/متغیرهای محیطی را ارائه می‌دهد. نتیجه، کاهش زحمت در تعمیرات، بهبود رفتار در رخدادها، و یکپارچه‌سازی مدیریت اتصال برای PostgreSQL و MySQL روی AWS است.

🟣لینک مقاله:
https://golangweekly.com/link/173079/web


👑 @gopher_academy
👍5
🔻 درود دوستان عزیز، لطفا توجه کنید.

❇️ از این به بعد برای تبلیغات فقط مستقیماً به خودم پیام بدید. 👇
برای دریافت تعرفه‌های تبلیغاتی لطفاً در پیام خصوصی با من در ارتباط باشید.

🎯 @mrbardia72

هیچ تبلیغی از سمت هشتگ یار دیگه پذیرفته نخواهد شد.

🌷 با سپاس
🤝4
Gopher Academy pinned «🔻 درود دوستان عزیز، لطفا توجه کنید. ❇️ از این به بعد برای تبلیغات فقط مستقیماً به خودم پیام بدید. 👇 برای دریافت تعرفه‌های تبلیغاتی لطفاً در پیام خصوصی با من در ارتباط باشید. 🎯 @mrbardia72 هیچ تبلیغی از سمت هشتگ یار دیگه پذیرفته نخواهد شد. 🌷 با سپاس»
🔵 عنوان مقاله
how a malicious Go module was exfiltrating credentials via Telegram.

🟢 خلاصه مقاله:
در این یادداشت از Golang Weekly یک نمونه سوءاستفاده زنجیره تأمین در اکوسیستم Go شرح داده می‌شود: ماژولی که با اجرای پنهانی (مثلاً در init) اطلاعات حساسی مثل متغیرهای محیطی، کلیدهای ابری، اعتبارنامه‌های Git و SSH را جمع‌آوری و از طریق API ربات تلگرام به‌صورت HTTPS ارسال می‌کرد. استفاده از تلگرام به‌دلیل ترافیک قابل‌قبول و زیرساخت آماده، به مهاجم کمک می‌کند تا انتقال داده را پنهان کند. نشانه‌های کشف شامل ارجاع به api.telegram.org، رشته‌های مبهم‌سازی‌شده حاوی توکن/Chat ID، و منطق غیرعادی هنگام ساخت یا تست است. برای مقابله: قفل‌کردن نسخه و checksum وابستگی‌ها، استفاده از GOPROXY و پایگاه checksum، vendors کردن کتابخانه‌های حساس، بازبینی تغییرات، قطع دسترسی شبکه در محیط build/test، تحلیل ایستا برای آدرس‌های مشکوک، اسکن اسرار، و به‌کارگیری اعتبارنامه‌های کم‌اختیار و کوتاه‌عمر توصیه می‌شود. پیام نهایی: پیام‌رسان‌ها را به‌عنوان کانال‌های بالقوه خروج داده در نظر بگیرید و حتی وابستگی‌های کوچک را با دقت بررسی کنید.

🟣لینک مقاله:
https://golangweekly.com/link/173335/web


👑 @gopher_academy
2🔥2
🔵 عنوان مقاله
Building Ebitengine Games for Web Browsers

🟢 خلاصه مقاله:
این معرفی سه‌دقیقه‌ای از تروِر اسلوکِم نشان می‌دهد چگونه بازی‌های Ebitengine (موتور دوبعدی مبتنی بر Go) را برای مرورگر بسازیم. هسته کار این است: پروژه Go را با GOOS=js و GOARCH=wasm به WebAssembly کامپایل کنید، فایل wasm_exec.js را در صفحه HTML بگنجانید و بازی را روی یک canvas اجرا نمایید. در مرورگر باید به محدودیت‌های فایل‌سیستم، بارگذاری ناهمزمان دارایی‌ها، نیاز شروع صدا با تعامل کاربر، همگام‌سازی رندر با requestAnimationFrame و تفاوت‌های DPI و تغییر اندازه صفحه توجه کنید. برای دارایی‌ها از embed یا سرویس‌دهی مستقیم استفاده کرده و آن‌ها را برای وب بهینه کنید؛ کنترل‌ها را برای ماوس/کیبورد/تاچ طراحی و روی موبایل و مرورگرهای مختلف تست کنید. برای انتشار، یک میزبان استاتیک (مثل GitHub Pages/Netlify) کافی است، به شرط تنظیم MIME نوع application/wasm و HTTPS. نتیجه: مسیری سریع از ساخت دسکتاپ به وب با WebAssembly، یک HTML ساده و رعایت قیود مرورگر، مطابق راهنمای کوتاه و کاربردی نویسنده.

🟣لینک مقاله:
https://golangweekly.com/link/173337/web


👑 @gopher_academy
1
🔵 عنوان مقاله
has now released Omarchy 2.0

🟢 خلاصه مقاله:
**اومارچی ۲.۰ منتشر شده است و یک ویدئوی ۳۰ دقیقه‌ای همراه آن ارائه شده که روند کار و ویژگی‌ها را مرور می‌کند. این عرضه در روزهای اخیر با استقبال و توجه قابل‌توجهی از سوی توسعه‌دهندگان در شبکه‌های اجتماعی روبه‌رو شده و بحث‌های پررونقی را برانگیخته است.

🟣لینک مقاله:
https://golangweekly.com/link/173359/web


👑 @gopher_academy
Forwarded from Bardia & Erfan
🚀 به دنیای توسعه و تکنولوژی خوش اومدی!

اگر به موضوعات زیر علاقه‌مندی:

🔹 Golang
🔹 Linux & DevOps
🔹 Software Engineering
🔹 AI & Machine Learning
🔹 فرصت‌های شغلی ریموت (خارجی و داخلی)

ما برات یه مجموعه کانال‌های تخصصی ساختیم تا همیشه به‌روز، حرفه‌ای و الهام‌بخش بمونی!
📚 یادگیری، فرصت، شبکه‌سازی و پیشرفت، همش اینجاست...

📌 از این لینک همه چنل‌هامونو یه‌جا ببین و جوین شو:

👉 https://t.iss.one/addlist/QtXiQlynEJwzODBk
2
🔵 عنوان مقاله
html-to-markdown 2.4: Convert HTML to Markdown

🟢 خلاصه مقاله:
این ابزار با نام html-to-markdown 2.4 محتوای HTML را با پارس‌کردن واقعی ساختار آن به Markdown تبدیل می‌کند، نه با الگوهای regex؛ بنابراین در برابر موارد پیچیده و مرزی پایدارتر است. هم به‌صورت ابزار خط فرمان و هم به‌عنوان کتابخانه Go قابل استفاده است و برای سناریوهایی مثل مهاجرت محتوا و تولید وب‌سایت‌های استاتیک مناسب است.

🟣لینک مقاله:
https://golangweekly.com/link/173347/web


👑 @gopher_academy
🤝21
🔵 عنوان مقاله
his experiences at last week's GopherCon UK 2025.

🟢 خلاصه مقاله:
** این یادداشت در Golang Weekly گزارشی تأمل‌محور از تجربه نویسنده در GopherCon UK 2025 (هفته گذشته) است؛ بر بلوغ اکوسیستم Go، سادگی و قابلیت اتکا تأکید دارد و موضوعاتی مانند الگوهای همزمانیِ قابل‌فهم، بهینه‌سازی مبتنی بر پروفایلینگ، تست مقیاس‌پذیر، تجربه توسعه‌دهنده، و امنیت زنجیره تأمین را برجسته می‌کند. ارزش «hallway track» و گفتگوهای غیررسمی برای انتقال تجربه‌های عملی و اتخاذ تغییرات کوچک اما اثرگذار نیز پررنگ است. نویسنده با قدردانی از برگزارکنندگان، توصیه‌هایی عملی مثل اولویت دادن به وضوح کد، شروع بهینه‌سازی با اندازه‌گیری، و سرمایه‌گذاری روی ابزارهای بازخورد سریع ارائه می‌کند و خوانندگان را به پیگیری منابع رسمی کنفرانس و آزمودن ایده‌ها در پروژه‌های خود تشویق می‌کند.

🟣لینک مقاله:
https://golangweekly.com/link/173082/web


👑 @gopher_academy
2
🔵 عنوان مقاله
Josh W Comeau has a new, fantastic guide to SVG paths.

🟢 خلاصه مقاله:
**راهنمای تازه‌ای از جاش دابلیو. کومو درباره مسیرهای SVG منتشر شده که درک نحو و ساخت مسیرها را ساده می‌کند و نشان می‌دهد چگونه با تغییرات کوچک می‌توان گرافیک‌های دقیق و کم‌حجم ساخت. همچنین جدیدترین مطلب معرفی‌شده در خبرنامه Golang Weekly مروری منتخب و کوتاه از تازه‌های دنیای Go، ابزارها و نکات کاربردی ارائه می‌دهد تا پیگیری اخبار و منابع پراکنده آسان‌تر شود.

🟣لینک مقاله:
https://golangweekly.com/link/173110/web


👑 @gopher_academy
Forwarded from Software Engineer Labdon
ا"Architecture Decision Record (ADR) Template" یعنی یک قالب (Template) برای ثبت و مستندسازی تصمیم‌های معماری نرم‌افزار.

به طور ساده:

وقتی در طراحی یک سیستم نرم‌افزاری تصمیم‌های مهمی مثل انتخاب دیتابیس، معماری میکروسرویس‌ها، الگوی کشینگ، یا حتی انتخاب یک کتابخانه مهم گرفته می‌شود، این تصمیم‌ها باید مستند شوند تا بعداً تیم یا افراد جدید بدانند چرا آن انتخاب انجام شده و چه گزینه‌هایی رد شده‌اند.

یک ADR Template کمک می‌کند این مستندسازی همیشه با یک ساختار مشخص و یکسان انجام شود.

---

### ساختار رایج یک ADR Template

معمولاً شامل بخش‌های زیر است:

1. Title (عنوان تصمیم)
یک عنوان کوتاه و گویا.

2. Status (وضعیت)
مثلاً: Proposed, Accepted, Rejected, Superseded

3. Context (زمینه / دلیل نیاز به تصمیم)
توضیح اینکه چه مشکلی وجود داشته یا چه نیازی باعث شد که تصمیم گرفته شود.

4. Decision (تصمیم نهایی)
تصمیمی که گرفته شد (مثلاً "ما از PostgreSQL به جای MySQL استفاده می‌کنیم").

5. Consequences (پیامدها)
مزایا و معایب این تصمیم، و اثراتی که بر سیستم دارد.

---

### مثال ساده

# ADR 001: انتخاب دیتابیس اصلی

## Status
Accepted

## Context
ما نیاز به یک دیتابیس داریم که قابلیت ذخیره داده‌های ساخت‌یافته و مقیاس‌پذیری داشته باشد. تیم تجربه خوبی با SQL دارد.

## Decision
انتخاب PostgreSQL به عنوان دیتابیس اصلی.

## Consequences
+ ویژگی‌های پیشرفته (JSONB، Full-text search)
+ جامعه کاربری بزرگ
- یادگیری برخی قابلیت‌های خاص برای اعضای تیم جدید


👑 @software_Labdon
1
Forwarded from Gopher Job
🟢 اگر کارفرما یا کارجو هستی

و دنبال نیرو یا موقعیت شغلی توی حوزه‌های زیر هستی، به من پیام بده 👇

⚔️ DevOps Engineer
⚔️ Site Reliability Engineer (SRE)
⚔️ Linux SysAdmin
⚔️ Cloud Engineer (AWS/GCP/Azure)
⚔️ Infrastructure Engineer
⚔️ Security Engineer (DevSecOps/Linux)
⚔️ Automation Engineer
⚔️ Platform Engineer
⚔️ Software Security
⚔️ Software QA
⚔️ Backend
⚔️ AI Engineer / Machine Learning
⚔️ Database Engineer / DBA

📩 همین الان پیام بده و استارت بزن! تا هم بتونی نیروی خوب پیدا کنی و یا یتونی یه موقعیت شغلی مناسب پیدا کنی

به من پیام بده آگهی یا رزومه ات رو قرار بدم اینجا

@mrbardia72
🔵 عنوان مقاله
you can read it in article form.

🟢 خلاصه مقاله:
این نوشته دو مطلب فنی را معرفی می‌کند: نخست، ترور اسلاکِم به رفتاری ظریف در الحاق عناصر به اسلایس‌های Go می‌پردازد؛ جایی که به‌دلیل اشتراک آرایهٔ پشتیبان، append می‌تواند به‌صورت غیرمنتظره دادهٔ اسلایس‌های دیگر را تغییر دهد یا بسته به ظرفیت، باعث تخصیص جدید شود. نتیجه این است که باید حواسمان به ظرفیت، اشتراک حافظه و جداسازی داده با copy یا تخصیص هدفمند باشد. دوم، الی بندرسکی پیاده‌سازی یک مفسر کوچک Forth را در Go و C مقایسه می‌کند تا تفاوت‌های عملی میان ایمنی و سهولت (در Go) و کنترل و سربار کم (در C) را نشان دهد. پیام کلی: با درک دقیق جزییات زبان و مدل حافظه، می‌توان از خطاهای پنهان پرهیز کرد و انتخاب‌های بهینه‌تری انجام داد.

🟣لینک مقاله:
https://golangweekly.com/link/173338/web


👑 @gopher_academy
3
🔵 عنوان مقاله
What is the Go Proxy Even Doing?

🟢 خلاصه مقاله:
گو برای پایداری و تکرارپذیری ساخت‌ها از یک پروکسی ماژول استفاده می‌کند که با کش‌کردن و سرویس‌دهی نسخه‌ها، وابستگی توسعه‌دهندگان به مخازن مبدا را کاهش می‌دهد. اما همین طراحی می‌تواند باعث کلون‌های تکراری و فشار اضافه بر سرورهای بالادستی شود؛ یعنی یک نسخه چندبار کلون می‌شود یا درخواست‌های پشت‌سرهم برای همان تگ‌ها و کامیت‌ها ثبت می‌گردد. تد با لاگ‌های واقعی نشان می‌دهد این الگو چگونه رخ می‌دهد و سپس توضیح می‌دهد برای محافظت از سرورش چه کرده است؛ از جمله گذاشتن محدودیت نرخ و فیلتر کردن ترافیک تکراری تا جلوی بار غیرضروری گرفته شود. جمع‌بندی: پروکسی به مصرف‌کنندگان بسته‌ها کمک می‌کند، اما می‌تواند هزینه را به بالادست منتقل کند؛ بنابراین نگه‌دارندگان باید از این الگوها آگاه باشند و دفاع‌های سبک‌وزنی برای پایداری سرویس خود در نظر بگیرند.

🟣لینک مقاله:
https://golangweekly.com/link/173087/web


👑 @gopher_academy
2
تابع atomic.LoadInt32 در زبان برنامه‌نویسی Go (گولنگ) برای خواندن ایمن (safe) یک مقدار 32 بیتی از نوع int32 از حافظه به صورت اتمیک (atomic) استفاده می‌شود. عملیات اتمیک به این معناست که این عملیات به صورت کامل و بدون وقفه انجام می‌شود و از تداخل (race condition) بین گوروتین‌ها (goroutines) جلوگیری می‌کند.

توضیح دقیق‌تر:
- پکیج: این تابع در پکیج sync/atomic قرار دارد.
- کاربرد: atomic.LoadInt32 برای خواندن مقدار یک متغیر int32 از حافظه به صورت اتمیک استفاده می‌شود. این تابع تضمین می‌کند که مقدار خوانده‌شده دقیق و بدون تأثیر از تغییرات همزمان توسط گوروتین‌های دیگر است.
- ساختار:

  func LoadInt32(addr *int32) (val int32)


- addr: اشاره‌گر به متغیر int32 که می‌خواهید مقدارش را بخوانید.
- val: مقداری که از حافظه خوانده می‌شود و به عنوان خروجی برگردانده می‌شود.


مثال:
package main

import (
"fmt"
"sync/atomic"
)

func main() {
var counter int32 = 42

// خواندن مقدار counter به صورت اتمیک
value := atomic.LoadInt32(&counter)
fmt.Println("Value:", value) // خروجی: Value: 42
}


چرا از atomic.LoadInt32 استفاده کنیم؟
- وقتی چندین گوروتین به یک متغیر مشترک دسترسی دارند، استفاده از عملیات معمولی (غیراتمیک) ممکن است به مشکلات همزمانی (concurrency issues) مثل race condition منجر شود.
- atomic.LoadInt32 تضمین می‌کند که مقدار خوانده‌شده همیشه معتبر و به‌روز است، بدون اینکه نیازی به قفل (lock) باشد.

نکات:
- این تابع فقط برای متغیرهای از نوع int32 کار می‌کند. برای انواع دیگر (مثل int64 یا uint32) توابع مشابهی مثل atomic.LoadInt64 یا atomic.LoadUint32 وجود دارد.
- عملیات اتمیک معمولاً سریع‌تر از استفاده از قفل‌ها (مثل sync.Mutex) هستند، اما فقط برای عملیات‌های ساده مثل خواندن یا نوشتن مناسب‌اند.

👑 @gopher_academy
31
کجا نباید از داداشمون RabbitMQ استفاده کنیم؟

1- وقتی نیاز به real-time response داریم.
چرا؟ چون RabbitMQ صف هست و ارسال/دریافت پیام ممکنه با تاخیر انجام شود.
پیشنهادم WebSocket، gRPC یا Redis Pub/Sub است.

2- وقتی به message replay یا history نیاز داریم
چرا؟ چون RabbitMQ پیام‌ها رو بعد از مصرف حذف می‌کند. البته میشه کانفیگ کرد که نگه داره.

3- زمانی که پیام‌ها حجمشون خیلی زیاد است.
چرا؟ چون در حجم بالا RabbitMQ دچار افت performance می‌شود. Kafka رو پیشنهاد می‌کنم برای اینجا.

4- وقتی ترتیب دقیق پردازش پیام‌ها خیلی مهم است. چرا؟ چون  RabbitMQ تضمین دقیقی برای ترتیب پیام‌ها ندارد. اینجا هم پیشنهادم Kafka است.


<Amirhossein Dehghan/>
👍432🐳1
🔵 عنوان مقاله
GitHub MCP Server 0.13

🟢 خلاصه مقاله:
گیت‌هاب با انتشار GitHub MCP Server نسخهٔ 0.13 یک پیاده‌سازی رسمی و قابل اتکا از سرور MCP ارائه کرده است. این سرور با زبان Go نوشته شده تا کارایی، سادگی استقرار و قابل‌حمل بودن را فراهم کند. رسمی بودن آن، نقش مرجع را برای رفتار و سازگاری ایفا می‌کند و نسخه‌گذاری 0.13 نشان‌دهندهٔ توسعهٔ تدریجی و تمرکز بر بلوغ و پایداری است؛ بنابراین گزینه‌ای مناسب برای تیم‌هایی است که به یک راهکار مطمئن و نگهداشت‌پذیر نیاز دارند.

🟣لینک مقاله:
https://golangweekly.com/link/173355/web


👑 @gopher_academy
3
🔵 عنوان مقاله
Understanding Go Error Types: Pointer vs. Value

🟢 خلاصه مقاله:
تفاوت میان تعریف خطا با گیرنده مقداری و اشاره‌گری در Go می‌تواند به خطاهای پنهان منجر شود. اگر متد Error را با گیرنده مقداری تعریف کنید، هر دو T و *T اینترفیس error را پیاده‌سازی می‌کنند؛ اما با گیرنده اشاره‌گری فقط *T این کار را می‌کند. پیامدها: امکان ایجاد اینترفیس error غیرnil که حاوی اشاره‌گر nil است و بررسی err != nil را گمراه می‌کند، و شکست بی‌سروصدای errors.Is/As در صورت عدم تطابق نوع مقداری/اشاره‌گری. راهکارها: برای انواع کوچک و تغییرناپذیر از گیرنده مقداری استفاده کنید و فقط در صورت نیاز واقعی از گیرنده اشاره‌گری بهره ببرید؛ سازگاری در ساخت و بازگرداندن خطاها را رعایت کنید؛ با assertion کامپایلی اطمینان بگیرید نوع شما error را پیاده‌سازی می‌کند و تست رفتار nil را اضافه کنید.

🟣لینک مقاله:
https://golangweekly.com/link/173124/web


👑 @gopher_academy
🔥2
Forwarded from Software Engineer Labdon
جدا از مهندسی پشت تلگرام که بهینه نوشته شده، تلگرام چیزی داره به اسم Update Queue. چیزی که ۱ سال از دوران جوونیم رو صرف مهندسی معکوسش کردم.
تلگرام برای پوش کردن تغییرات مثل پیام جدید، ادیت، ری اکشن، تایپینگ و… به کلاینت‌ها از سرویس Updates تو پروتکل MTProto استفاده میکنه، ایده ی کلی و کلیدی خیلی ساده اس و اینه که کلاینت ها یه state محلی نگه میدارن و آپدیتارو دقیقا با ترتیب درست اعمال میکنن؛ اگه شکافی بینشون افتاد، Difference می‌گیرن و دوباره پرش میکنن.

چرا اینکارو کرده و کلا چالشا چیه؟
• ترتیبش مهمه چون ممکنه یه اپدیت وابسته به چیزی باشه که توی خود همون پچ میاد
• تحویل دقیق باید انجام بشه و هیچی گم نشه
• مقیاسش هم میلیون‌ها کاربر همزمان باید بگیرنش، مثل کانال های بزرگ

از اونجایی که هر پیامرسان منبع عظیمی از اتفاقاتیه که هر لحظه میوفته ما میتونیم اسم این اتفاقات رو event بزاریم. تلگرام هم یه پیامرسان مولتی کلاینته، یعنی هر کاربر میتونه چندین دیوایس برای یه حساب داشته باشه، پس وقتی یه ایونت اتفاق میوفته که باید یه کاربر از اون خبردار بشه باید اون ایونت رو به دیوایس های دیگه ی کاربر هم بفرسته، حدودا با مرتبه زمانی On^2.

مکانیزم اینجوریه که وقتی دیوایسی انلاین باشه و سوکت همون سوکتی باشه که keep alive هست یا اخرین rpc رو کال کرده سرور ایونت رو توی queue برای اون دیوایس نگه نمیداره و مستقیم میفرسته به کلاینت، حالا از اونجایی که کلاینت های دیگه ممکنه افلاین باشن یا حتی توی بکگراند پروسسشون کیل شده باشه عقب میمونن. حالا وقتی اون دیوایسی که عقب مونده بود با باز شدن سوکتش درخواست گرفتن اپدیت هارو وقتی که افلاین بوده رو از سرور میکنه و اطلاعات لوکالش رو میفرسته به سرور، من برای ساده شدنش اینجوری میگم که دیوایس میاد به سرور میگه من تا این زمان t رو داشتم و بعد این رو بهم بده، سرور هم میاد حساب کتابش رو میکنه و جواب رو توی یه پچ میفرسته! حالا چی توی این پچ هست و چی رو میفرسته رو میتونم یه رشته توییت دیگه در موردش بزنم.

حالا اگه اعدادی که توی پچ میاد با اعداد توی کلاینت نخونه عملا میگیم گپ اتفاق افتاده، برای همین هم کلاینت باید رکویست getDiff رو بزنه.
رکویست updates.getDifference به کلاینت اجازه می‌ده بگه:
من الان pts = X و seq = Y هستم و هر چی بین این و حالت جدید هست بهم بده.
• سرور ممکنه جواب بده:
difference: همه ی آپدیت های گمشده
differenceSlice: بخشی از آپدیت ها یعنی هنوز باید به فچ کردن ادامه بدی
differenceEmpty: چیزی تغییر نکرده

جالبترش اینه که توی نسخه های جدیدترش برای کانال ها مکانیسم جدا getChannelDifference هست، چون هر کانال pts مستقل داره و این باعث میشه شما فقط کانال هایی رو بگیری که تغییر کردن! برای سوپر گروه هم مکانیزم همینه.

این باعث می‌شه حتی اگر چند ساعت آفلاین باشی، بعد از اتصال دوباره دقیقاً همه‌چی رو بگیری و هیچ پیامی رو از دست ندی

حتی با packet loss یا reconnect، state کلاینت خراب نمیشه و سرور مجبور نیست برای هر کلاینت همه چی رو دوباره بفرسته. فقط gap ها sync میشن

<Abolfazl/>
6🔥2👍1💯11