# آموزش استفاده از P2P Sync: همگام‌سازی بین دستگاه‌های مختلف بدون نیاز به cloud > **یادداشت‌های خود را به راحتی بین دستگاه‌های مختلف همگام‌سازی کنید – نیازی به استفاده از cloud نیست.** در دورانی که حریم خصوصی داده‌ها اهمیت بیشتری پیدا کرده است، Noterich روشی نوآورانه برای همگام‌سازی بین دستگاه‌ها ارائه می‌دهد. فنکشن **P2P (همپیمانی به همپیمان) همگام‌سازی** ما امکان اشتراک‌گذاری یادداشت‌ها بین دستگاه‌های مختلف را بدون نیاز به استفاده از سرورهای cloud فراهم می‌کند. داده‌های شما همیشه در اختیار شماست. ## چرا P2P Sync را انتخاب کنیم؟ برنامه‌های سنتی ذخیره‌سازی یادداشت‌ها داده‌های شما را در سرورهای مرکزی ذخیره می‌کنند. این کار می‌تواند باعث ایجاد خطرات مربوط به حریم خصوصی، هزینه‌های اشتراک‌گذاری و وابستگی به زیرساخت‌های شرکت‌های ثالث شود. Noterich روشی متفاوت ارائه می‌دهد: ```mermaid graph LR A[دستگاه شما] <-->|ارتباط مستقیم| B[دستگاه دیگر] C[سرور cloud] -.->|لازم نیست| A C -.->|لازم نیست| B style A fill:#4CAF50,color:#fff style B fill:#4CAF50,color:#fff style C fill:#9E9E9E,color:#fff,stroke-dasharray: 5 5 ``` ### مزایا اصلی - **🔒 حریم خصوصی اولویت دارد**: یادداشت‌های شما هرگز به سرورهای شرکت‌های ثالث دسترسی ندارند. - **⚡ سریع و مستقیم**: دستگاه‌ها به صورت مستقیم با یکدیگر ارتباط برقرار می‌کنند تا همگام‌سازی سریع‌تر انجام شود. - **💰 نیازی به اشتراک‌گذاری نیست**: همگام‌سازی رایگان بدون نیاز به سطوح اشتراکی ارائه می‌شود. - **🌐 کار می‌کند در هر جایی**: همگام‌سازی از طریق شبکه محلی یا اینترنت انجام می‌شود. - **📱 چندپلتفرمی**: کار می‌کند بین دسکتاپ، لپتاپ، تبلت و موبایل. ## نحوه کارکرد P2P Sync Noterich از فناوری **WebRTC** و همچنین **PeerJS** برای برقراری ارتباط مستقیم بین دستگاه‌ها استفاده می‌کند. هنگام شروع همگام‌سازی: ```mermaid sequenceDiagram participant D1 as Device A (ارسی) participant S as Signaling Server participant D2 as Device B (گیرنده) D1->>S: درخواست اتصال ID S-->>D1: تولید شناسه اتاق D1->D2: اشتراک کردن لینک اتصال (QR/URL) D2->S: اتصال با استفاده از شناسه اتاق S-->>D2: برقراری اتصال همپیمان D1->D2: رمزنگاری و ارسال یادداشت‌ها D2->D2: رمزنگاری و بازیابی یادداشت‌ها Note over D1,D2: انتقال رمزنگاری مستقیم<br/>هیچ داده‌ای در سرور ذخیره نمی‌شود ``` ### فناوری‌های پشت پرده پیاده‌سازی P2P Noterich از فناوری‌های زیر استفاده می‌کند: 1. **کتابخانه PeerJS**: مدیریت پیچیدگی‌های ارتباط بین مرورگرها 2. **رمزنگاری AES-GCM**: رمزنگاری نظامی برای داده‌های یادداشت‌ها 3. **تولید کلید PBKDF2**: تولید کلیدهای رمزنگاری مبتنی بر رمزهای عبور 4. **ذخیره‌سازی MessagePack**: کدگذاری داده‌های بی‌نهایت برای انتقال سریع 5. **ذخیره‌سازی IndexedDB**: پایگاه داده محلی برای دسترسی آفلاین ## شروع کار با P2P Sync ### شرایط لازم قبل از شروع، مطمئن شوید که: - ✅ Noterich روی هر دو دستگاه نصب شده است. - ✅ هر دو دستگاه به اینترنت متصل هستند (یا در همان شبکه محلی). - ✅ یک مرورگر مدرن وجود دارد (Chrome، Firefox، Edge، Safari). ### مرحله 1: شروع اشتراک‌گذاری از دستگاه اصلی 1. یادداشتی که می‌خواهید اشتراک کنید را در Noterich باز کنید. 2. روی دکمه **Share** در نوار ابزار کلیک کنید. 3. گزینه **"P2P Share"** را انتخاب کنید. 4. (اختیاری) برای امنیت بیشتر، رمز عبور تعیین کنید. - رمز عبور باید حداقل 8 کاراکتر باشد. - از رمزنگاری AES-256-GCM استفاده می‌شود. 5. صبر کنید تا سرور P2P آماده شود. ```mermaid graph TD A[باز کردن یادداشت] --> B[کلیک روی دکمه اشتراک] B --> C[انتخاب P2P Share] C --> D{رمز عبور تعیین شده؟} D -->|بله| E[ورود رمز عبور ≥8 کاراکتر] D -->|خیر| F[رفتن بدون رمزنگاری] E --> G[آماده کردن سرور P2P] F --> G G --> H[تولید لینک اشتراک و کد QR] ``` ### مرحله 2: اشتراک کردن لینک اتصال پس از شروع سرور P2P، Noterich لینک اشتراک را تولید می‌کند: - **لینک قابل اشتراک**: حاوی پارامترهای اتصال - **کد QR**: برای اسکن سریع در دستگاه‌های موبایل شکل لینک به این شکل است: ``` https://noterich.com/#dbshare=<infoHash>&server=<signaling-server> ``` **روش‌های اشتراک‌گذاری:** | روش | برای چه کسانی مناسب است | چگونه انجام شود | |--------|----------|--------| | 🔗 کپی کردن لینک | ایمیل، برنامه‌های پیام‌رسانی | کلیک روی دکمه "کپی کردن لینک" | | 📱 کد QR | دستگاه‌های موبایل | اسکن کردن با دوربین دستگاه | | 📧 ایمیل | همکاران دوردست | کپی کردن لینک در ایمیل | ### مرحله 3: دریافت یادداشت‌ها در دستگاه گیرنده در دستگاه گیرنده: 1. **باز کردن لینک اشتراک** - روی لینک مستقیماً کلیک کنید، یا - کد QR را با دوربین دستگاه اسکن کنید. 2. **بررسی یادداشت‌های ورودی** - بررسی عنوان و اطلاعات متا یادداشت‌ها - بررسی اطلاعات ارسینده. 3. **ورود رمز عبور** (در صورتی که رمزنگاری شده باشد) - ورود رمز عبور ارسینده - داده‌ها در دستگاه خود رمزنگاری می‌شوند. 4. **انتخاب فضای کاری مقصد** - انتخاب فضای کاری موجود، یا - ایجاد فضای کاری جدید برای یادداشت‌های وارد شده. 5. **تأیید وارد کردن** - یادداشت‌ها رمزنگاری شده و در IndexedDB ذخیره می‌شوند. - فهرست جستجو به طور خودکار بازسازی می‌شود. ```mermaid graph LR A[باز کردن لینک] --> B[ارتباط با ارسینده] B --> C{رمزنگاری شده؟} C -->|بله| D[ورود رمز عبور] C -->|خیر| E[بررسی متا] D --> E E --> F[بررسی یادداشت‌ها] F --> G[انتخاب فضای کاری] G --> H[وارد کردن و بازسازی فهرست] H --> I[همگام‌سازی تمام شد!] style I fill:#4CAF50,color:#fff ``` ## ویژگی‌های پیشرفته ### انتقال رمزنگاری شده برای یادداشت‌های حساس، Noterich امکان رمزنگاری انتقالی را ارائه می‌دهد: **فرآیند رمزنگاری:** ```javascript // رمز عبور → کلید رمزنگاری (PBKDF2) password + salt → deriveKey() → کلید AES-256-GCM // داده‌های یادداشت → بافر رمزنگاری شده noteData + key + iv → encrypt() → encryptedBuffer // انتقال بافر { encryptedBuffer: ArrayBuffer, salt: Uint8Array, // برای تولید کلید iv: Uint8Array // ویژوال اولیه } ``` **ویژگی‌های امنیتی:** - 🔐 100,000 تکرار PBKDF2 برای تولید کلید - 🔐 سالت و IV تصادفی برای هر انتقال - 🔐 رمزنگاری معتبر AES-256-GCM - 🔐 رمز عبور هرگز منتقل نمی‌شود – فقط در دستگاه استفاده می‌شود. ### انتقال گروهی یادداشت‌ها انتقال چندین یادداشت به صورت کارآمد: 1. دسترسی به **Database Transfer** از تنظیمات 2. انتخاب **"P2P Sync"** حالت 3. انتخاب یادداشت‌هایی که باید همگام‌سازی شوند 4. گیرنده می‌تواند پیش‌نمایش گروهی از یادداشت‌ها را مشاهده کند. **بهبود عملکرد:** - یادداشت‌ها به صورت بخش‌های کوچک (512KB) انتقال می‌شوند - پردازش غیرمتمرکز از بین می‌رود تا نمایشگر کنسول مسدود نشود - ردیابی پیشرفت با دقت بیتی انجام می‌شود - می‌توانید در هر زمانی کار را متوقف کنید بدون اینکه داده‌ها خراب شوند. ### حل اختلافات هنگام همگام‌سازی یادداشت‌هایی که در دو دستگاه وجود دارند: ```mermaid graph TD A[شناسایی اختلاف] --> B{مقایسه تاریخ‌ها} B -->|جهت محلی جدیدتر| C[نگه داشتن نسخه محلی] B -->|جهت محلی جدیدتر| D[نمایش اختلاف] D --> E[انتخاب نسخه] E --> F[محلی] E --> G[محلی] E --> H[ادغام به صورت دستی] B -->|هر دو حذف شده| I[حذف] style C fill:#2196F3,color:#fff style F fill:#2196F3,color:#fff style G fill:#4CAF50,color:#fff ``` **انواع اختلافاتی که حل می‌شوند:** - `جهت محلی جدیدتر`: نسخه شما جدیدتر است - `جهت محلی جدیدتر`: نسخه ورودی جدیدتر است - `حذف شده محلی`: شما این یادداشت را محلی حذف کرده‌اید - `حذف شده محلی`: یادداشت در دستگاه ارسینده حذف شده است - `حذف شده محلی`: یادداشتی که قبلاً حذف شده بود، دوباره باز شده است ## رفع مشکلات ### مشکلات رایج و راه‌حل‌ها #### ❌ «کتابخانه PeerJS بارگذاری نشده» **دلیل**: مسدود شدن شبکه برای CDN PeerJS یا سرور ارتباط. **راه‌حل‌ها:** 1. بررسی اتصال اینترنت 2. بررسی اینکه فایروال اجازه دارد اتصالات WebRTC را بپذیرد 3. امتحان کردن شبکه جایگزین (مثلاً hotspot موبایل) 4. اطمینان از اینکه مرورگر از WebRTC پشتیبانی می‌کند. #### ❌ «زمان انتقال طولانی» **دلیل**: NAT/فایروال مانع از اتصال مستقیم می‌شود. **راه‌حل‌ها:** 1. اینکه هر دو دستگاه در همان شبکه باشند کمک می‌کند 2. غیرفعال کردن VPN به طور موقت 3. بررسی تنظیمات WebRTC روی رابط 4. استفاده از کد QR برای اتصالات موبایل #### ❌ «رمز عبور اشتباه» **دلیل**: رمز عبور اشتباه یا انتقال خراب شده **راه‌حل‌ها:** 1. بررسی صحت رمز عبور 2. درخواست لینک اشتراک جدید از ارسینده 3. اطمینان از اتصال پایدار در حین انتقال 4. امتحان کردن تعداد کمتری از یادداشت‌ها در هر بار #### ❌ «خطا همگام‌سازی در حال انجام» **دلیل**: تلاش‌های همگام‌سازی همزمان **راه‌حل‌ها:** 1. صبر کردن تا همگام‌سازی کامل شود 2. بستن تب‌های Noterich دیگر 3. باز کردن صفحه و تلاش مجدد 4. پاک کردن کشوهای کنسول اگر مشکل ادامه داشت. ### نشانه‌های وضعیت اتصال | وضعیت | معنا | اقدامات لازم | |--------|---------|--------| | 🔵 در حال اتصال | برقراری اتصال همپیمان | 5-10 ثانیه صبر کنید | | 🟡 در حال مقایسه | بررسی تفاوت‌های یادداشت‌ها | روند عادی | | 🟠 در حال انتظار برای کاربر | نیاز به رمز عبور یا تأیید | بررسی پنجره اطلاعات | | 🟢 در حال اجرا | وارد کردن یادداشت‌ها به پایگاه داده | تا زمانی که تب بسته نشود | | ✅ موفقیت | همگام‌سازی با موفقیت | آماده استفاده از یادداشت‌ها | ## راهنمایی‌های عملی ### راهنمایی‌های مربوط به پیاده‌سازی #### 🔒 رمزنگاری: AES-256-GCM + PBKDF2 (100k تکرار) ```javascript password + salt → deriveKey() → کلید AES-256-GCM // داده‌های یادداشت → بافر رمزنگاری شده noteData + key + iv → encrypt() → encryptedBuffer // انتقال بافر { encryptedBuffer: ArrayBuffer, salt: Uint8Array, // برای تولید کلید iv: Uint8Array // ویژوال اولیه } ``` #### 📦 پیکربندی پردازش غیرمتمرکز ```javascript async function asyncBatchProcessor(items, processor, batchSize = 10) { // پردازش یادداشت‌ها به صورت بخش‌های 10 واحدی // در هر 10 ثانیه یک بار کنترل داده می‌شود // برای جلوگیری از مسدود شدن مولتی‌تر فریمور } ``` **توصیه‌ها:** - محدودسازی تعداد انتقالات به 100 یادداشت - 30 ثانیه صبر کردن بین انتقالات گروهی - پاک کردن کشوهای کنسول به طور مرتب ## پرسش‌های متداول ### پرسش: آیا می‌توانم بیش از دو دستگاه را همگام‌سازی کنم؟ **پاسخ**: بله! برای هر جفت دستگاه، یک سیستم P2P جداگانه ایجاد کنید. برای کارهای چنددستگاهی: 1. انتقال دستگاه A به دستگاه B 2. سپس انتقال دستگاه B به دستگاه C 3. یا استفاده از دستگاه A به عنوان مرکزی برای دستگاه‌های دیگر ### پرسش: آیا P2P sync در حالت آفلاین کار می‌کند؟ **پاسخ**: P2P نیاز به اتصال اینترنت برای برقراری ارتباط دارد. پس از اتصال: - ✅ انتقال داده‌ها از طریق شبکه محلی امکان‌پذیر است - ✅ داده‌ها مستقیماً بین دستگاه‌ها انتقال می‌شوند - ❌ برای شروع نیاز به دسترسی به سرور ارتباطی است ### پرسش: چه اتفاقی می‌افتد اگر همگام‌سازی متوقف شود؟ **پاسخ**: Noterich با اختلالات همگام‌سازی به خوبی کنار می‌آید: - یادداشت‌هایی که انتقال شده‌اند جداگانه حذف می‌شوند - هیچ داده خراب‌شده به پایگاه داده وارد نمی‌شود - فقط دستورالعمل‌های ادغام مجدد یادداشت‌ها انجام می‌شود - برای هر انتقال، لینک جدیدی تولید می‌شود ### پرسش: آیا می‌توانم با نسخه‌های Noterich دیگر همگام‌سازی کنم؟ **پاسخ**: قطعاً! P2P sync بین هر کاربر Noterich امکان‌پذیر است: - اشتراک کردن یادداشت‌های فردی با همکاران - نیازی به پیوند حساب‌های کاربری نیست - هر انتقال مستقل و امن است - برای اشتراک یکباره یادداشت‌ها مناسب است ### پرسش: آیا محدودیت حجمی برای انتقال داده‌ها وجود دارد؟ **پاسخ**: محدودیت‌های عملی بستگی دارند به: - ظرفیت حافظه مرورگر - استقرار شبکه - حداکثر محدودیت: 50MB برای هر بازیابی