PDA

View Full Version : ارائه راهکار برای یک سیستم کلاینت/سرور



moslem-visual
پنج شنبه 27 دی 1386, 23:05 عصر
اول از همه عذرخواهی میکنم اگر تاپیک رو در جای نادرستی زدم، مثاله چند وجه داشت و من فکر کردم که اینجا بهتر جواب بگیرم.

یه برنامه کلاینت/سرور هست که طرف سرور با زبان PHP و دیتابیس MySQL نوشته میشه و مسئولیت ارائه اطلاعات به کاربران بر روی وب رو داره، تقریبا تمام کار برنامه طرف سرور خواندن از دیتابیس است و فقط در رابطه با بخش عضویت عمل نوشتن در دیتابیس انجام میشود.

طرف کلاینت در واقع 80% پروژه رو تشکیل میده که عبارت است از مدیریت کل سیستم و زبان آن VB6 انتخاب شده (بر اساس معیارهای پروژه). مدیریت سیستم باید به صورت Offline انجام شود به این معنی که کلاینت دسترسی دائم به اینترنت ندارد بنابراین باید یک دیتابیس نیز در کلاینت وجود داشته باشد (Access) که اطلاعات موجود در آن دقیقا برابر دیتابیس طرف سرور باشد. مدیر تغییرات را بر روی این دیتابیس انجام میدهد و در زمان مناسب به صورت Dial-up به اینترنت متصل شده و در آن زمان برنامه کلاینت وظیفه اعمال تغییراتی که در دیتابس خود انجام داده بر روی دیتابیس سرور (MySQL) را بر عهده میگیرد.

همچنین ممکن است در طول زمان بین آخرین اتصال چند کاربر جدید در سیستم عضو شده باشند و در این صورت کلاینت باید اطلاعات دیتابیس خود را نیز با دیتابیس سرور چک کرده و در صورت لزوم بهنگام سازی را از این جهت نیز انجام دهد.

راهکار لازم برای دسترسی به MySQL از هر دو طرف در دست است، مجهولی که همچنان وجود دارد چگونگی بهنگام سازی تغییرات بر روی هر دو طرف (سرور/کلاینت) است (نحوه شناسایی تغییرات / استخراج از Access و نوشتن در MySQL) و پیشنهاداتی که در کل برای اجرای پروژه به ذهن میرسد. راستش وقتی به این پروژه بر خوردم به عنوان یه طرفدار قاطع PHP کمی به Net. حسودیم شد! امیدوارم که از طریق این تاپیک بهترین الگوریتم رو پیدا کنم، متشکرم.

oxygenws
جمعه 28 دی 1386, 00:51 صبح
در مورد مشکلت، چندی پیش یه همچین پروژه ای دستم بود (سمت کلاینت اون هم دقیقا با وی بی ۶ بود) و این ارتباط توسط درخواست های وب انجام می شد.

حالا این درخواست می تونه یک http request ساده باشه (برای گرفتن داده های جدید (مثل یوزر ها) یا مثلا ارسال داده های جدید) یا بهتر از اون، یک وب سرویس سمت سرور بنویسی که مثلا تحت پروتکل https داده ها بین کلاینت و سرور رد و بدل بشه.

پ.ن: با مسائل منطقی و پایه ای برخورد کن، واقعا دوست دارم دلیل حسودیت به دات نت رو بدونم، چه کاری می شد اونجا انجام بدی که اینجا نمی تونی؟

moslem-visual
جمعه 28 دی 1386, 12:32 عصر
ممنون از کمکتون، این راه خیلی بهتریه فقط یه مساله دیگه، مثلا مدیر یه سری اعمال رو در دیتابیس خودش انجام میده حالا من چطور این تغییرات رو ذخیره کنم که بعدا بتونم به عنوان SQL به وب سرویس سرور بفرستم؟ در رابطه با دلیل حسودی به Net. باید بگم هماهنگی که این فریم ورک در میان محصولات ویندوز و وب به وجود آورده خیلی کارها رو راحت تر کرده، با PHP همه کار میشه کرد اما در بعضی موارد خاص باید بیشتر از Net. تلاش کرد، من به شخصه هیچوقت PHP رو با چیز دیگه ای عوض نمیکنم.

oxygenws
جمعه 28 دی 1386, 13:03 عصر
ممنون از کمکتون، این راه خیلی بهتریه فقط یه مساله دیگه، مثلا مدیر یه سری اعمال رو در دیتابیس خودش انجام میده حالا من چطور این تغییرات رو ذخیره کنم که بعدا بتونم به عنوان SQL به وب سرویس سرور بفرستم؟
کافیه یک ستون از نوع enum برای وضعیت یا status یک سطر در جدول مبدا بذاری و مقادیرش می تونه چیزی شبیه اینها باشه:
async (برای زمانی که سینک نشده)
sync (برای زمانی که سینک شده)
syncing (برای زمانی که درخواست سینک داده شده و جواب نیومده)

مهم ترین حالت، حالت سومه که ممکنه باعث ایجاد تصادم (conflict) بشه و باید دقت بیشتری روش انجام بشه.


در رابطه با دلیل حسودی به Net. باید بگم هماهنگی که این فریم ورک در میان محصولات ویندوز و وب به وجود آورده خیلی کارها رو راحت تر کرده، با PHP همه کار میشه کرد اما در بعضی موارد خاص باید بیشتر از Net. تلاش کرد، من به شخصه هیچوقت PHP رو با چیز دیگه ای عوض نمیکنم.
خوب معلومه. اصولا PHP کار ها Native coder اند! اگر خیلی مشکل داری، می تونی از فریم ورک های موجود برای PHP استفاده کنی، اما به نظر من در اغلب موارد native coder بمون :) خلاصه اینکه.... در دین خود شک نکنید، باشد که آقامون استالمن با شما محشور شود! :دی

moslem-visual
جمعه 28 دی 1386, 23:19 عصر
خیلی خوشحالم که شما قبلا چنین پروژه ای رو انجام دادید! حالا که لطف کردید و پاسخ دادید یه سوال دیگه هم داشتم، برای ارسال Http Request از کدوم کنترل VB استفاده کردید؟ من تا اینجا WinSock و INet رو چک کردم ولی نمیدونم مورد مناسب تری هم وجود داره یا نه.



خوب معلومه. اصولا PHP کار ها Native coder اند! اگر خیلی مشکل داری، می تونی از فریم ورک های موجود برای PHP استفاده کنی، اما به نظر من در اغلب موارد native coder بمون :) خلاصه اینکه.... در دین خود شک نکنید، باشد که آقامون استالمن با شما محشور شود! :دی

من عاشق همین سادگی و خالص بودن PHP هستم، اینکه آدم میشینه و خیلی ساده فقط مینویسه، انگار داره با کامپیوتر حرف میزنه! من تا حالا در انتخابم شک نکردم چون بعد از کلی مطالعه و تست کردن به اینجا رسیدم، خدا OpenSource رو زنده نگه داره!

oxygenws
جمعه 28 دی 1386, 23:34 عصر
خیلی خوشحالم که شما قبلا چنین پروژه ای رو انجام دادید! حالا که لطف کردید و پاسخ دادید یه سوال دیگه هم داشتم، برای ارسال Http Request از کدوم کنترل VB استفاده کردید؟ من تا اینجا WinSock و INet رو چک کردم ولی نمیدونم مورد مناسب تری هم وجود داره یا نه.
سمت وی بی اون برنامه رو من انجام ندادم. سوالت رو در انجمن وی بی ۶ بپرس.

moslem-visual
شنبه 29 دی 1386, 00:10 صبح
ممنون، خودم درستش میکنم، بازم ممنون از کمکتون.

piter1355
شنبه 29 دی 1386, 14:42 عصر
برای دستیابی مستقیم به بانک اطلاعاتی Mysql میتونی درایور Mysql رو نصب کنی و ...قص الی هذا
در اینصورت شما هیچ محدودیتی برای کار با بانک اطلاعاتی نداری .

oxygenws
شنبه 29 دی 1386, 15:06 عصر
برای دستیابی مستقیم به بانک اطلاعاتی Mysql میتونی درایور Mysql رو نصب کنی و ...قص الی هذا
در اینصورت شما هیچ محدودیتی برای کار با بانک اطلاعاتی نداری .
شدیدا توصیه میشه که چنین اتفاقی نیافته :)
به هزار دلیل امنیتی که اگه خیلی لازمه مختصرا توضیح بدم! (ترجیح می دم خودتون فکر کنید و مشکلاتش رو پیدا کنید!)

piter1355
یک شنبه 30 دی 1386, 18:57 عصر
شدیدا توصیه میشه که چنین اتفاقی نیافته :)
به هزار دلیل امنیتی که اگه خیلی لازمه مختصرا توضیح بدم! (ترجیح می دم خودتون فکر کنید و مشکلاتش رو پیدا کنید!)

حق با شماست . ولی در شرایط استثنایی زمانی که یوزر این نرم افزار لوکالی خودتان هستید با محدود کردن رنج آی پی میشه به این گزینه فکر کرد .

oxygenws
یک شنبه 30 دی 1386, 20:11 عصر
با محدود کردن رنج آی پی میشه به این گزینه فکر کرد .
درسته :) ولی اگه دقت کنی، اتصال dialup می باشد و باز کردن رنج آیپی اون isp یعنی اجازه دادن به همهء مشتری های اون خدمات دهنده!

moslem-visual
یک شنبه 30 دی 1386, 20:35 عصر
ممنون، من در ابتدا اولین گزینه ای که به ذهنم رسید همین بود، در واقع اصلا به دسترسی با واسط وب سرویس فکر نکرده بودم، با مطرح شدن این گزینه از طرفی و مشکلاتی که روش قبل داشت از طرف دیگه به همراه آفلاین بودن سیستم دیگه به دسترسی مستقیم به MySQL فکر نکردم. به هر حال این اولین پروژه از این دست بود که به من واگذار شد و روی امنیت هم تاکید خاصی شده، از روش Http Request و با استفاده از TCP/IP فکر میکنید مشکل امنیتی پیش بیاد؟

oxygenws
یک شنبه 30 دی 1386, 21:09 عصر
روی امنیت هم تاکید خاصی شده، از روش Http Request و با استفاده از TCP/IP فکر میکنید مشکل امنیتی پیش بیاد؟
آره!!
اکثر مشکلات امنیتی ات رو می تونی با اتصال شدن از طریق https حل کنی.