PDA

View Full Version : ارتباط real time نرم افزار اندرویدی با سرور اینترنت



ic_teta
یک شنبه 27 خرداد 1397, 22:51 عصر
به نام خدا
سلام دوستان
من یک نرم افزار اندرویدی نوشتم که به یک وب‌سرور وصل میشه و آخرین تغییرات رو ازش میخونه. با پروتکل RestFul و با Http GET دارم این کارو می کنم. عیب این روش اینه که real time نیست، چون من میخام بلافاصله بعد از تفییرات تو سرور، نرم افزار با خبر بشه، اما اینجا مجبورم یک Trade off بین حجم اینترنت و زمان انجام بدم و مثلا هر 5 = n ثانیه یک درخواست GET بزنم و آخرین وضعیت رو بخونم.
مثلا فرض کنید یک کلاینت تلگرام که با یک کلاینت دیگه در ارتباطه و یکیشون داره تایپ میکنه، real time برای یکی دیگه نوشته می شه ... is typing
سمت سرور رو با هر چیزی از جمله ASP و PHP و ... میتونم پیاده کنم، اما نمیدونم سمت نرم افزار رو باید چطور پیاده کنم!!!
البته تو شبکه داخلی مشکلی نیست و با ارتباط tcp/ip به راحتی این کار انجام شدنیه، مشکل من تو بستر اینترنته که سرور، IP نرم افزار رو نمی تونه داشته باشه. نرم افزار ممکنه ساعت ها به سرور وصل باشه.
خوشحال میشم کمکم کنید.
ممنون

ASKaffash
دوشنبه 28 خرداد 1397, 08:34 صبح
سلام
به شما پیشنهاد میدهم برای برنامه هائی که برایتان سرعت و کیفیت مهم است حتما با سوکت برنامه نویسی کنید اگر دقت کنید برنامه های معروف و کاربردی عموما" با سوکت هستند در ضمن استفاده از وب سرویس نیاز به یک میزبان مثل IE و ... دارند ولی میتوانید با Application Server شخصی خودتان که روی سرور روی پورت خاصی پیاده سازی کرده اید اینکار را انجام دهید البته قبول دارم که برنامه نویسی سوکت خیلی خیلی سخت است و استفاده از وب سرویس خیلی راحتر است ولی برای کارهای مهم ارزشش را دارد من قبلا" تجربه سوکت و وب سرویس WCF و Remoting را داشته ام سوکت خیلی بهتر از وب سرویس است ولی پیر آدم در می آید

رامین مرادی
دوشنبه 28 خرداد 1397, 09:39 صبح
به نام خدا
سلام دوستان
من یک نرم افزار اندرویدی نوشتم که به یک وب‌سرور وصل میشه و آخرین تغییرات رو ازش میخونه. با پروتکل RestFul و با Http GET دارم این کارو می کنم. عیب این روش اینه که real time نیست، چون من میخام بلافاصله بعد از تفییرات تو سرور، نرم افزار با خبر بشه، اما اینجا مجبورم یک Trade off بین حجم اینترنت و زمان انجام بدم و مثلا هر 5 = n ثانیه یک درخواست GET بزنم و آخرین وضعیت رو بخونم.
مثلا فرض کنید یک کلاینت تلگرام که با یک کلاینت دیگه در ارتباطه و یکیشون داره تایپ میکنه، real time برای یکی دیگه نوشته می شه ... is typing
سمت سرور رو با هر چیزی از جمله ASP و PHP و ... میتونم پیاده کنم، اما نمیدونم سمت نرم افزار رو باید چطور پیاده کنم!!!
البته تو شبکه داخلی مشکلی نیست و با ارتباط tcp/ip به راحتی این کار انجام شدنیه، مشکل من تو بستر اینترنته که سرور، IP نرم افزار رو نمی تونه داشته باشه. نرم افزار ممکنه ساعت ها به سرور وصل باشه.
خوشحال میشم کمکم کنید.
ممنون




یه موردی رو خوندم که خودمم تا حالا باهاش کار نکردم اما تمایل دارم یاد بگیرم. اونم node js هست

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


این هم یه لینک که امیدوارم مفید باشه :
http://nodejs.ir/blog/nowjs-tutorial

Nevercom
دوشنبه 28 خرداد 1397, 10:20 صبح
یکی از روش هایی که میشه استفاده کرد و ساده‌تر هست و نیاز به تغییرات کمتری داره، Push to Sync هست. در این روش دریافت اطلاعات از سرور مثل قبل از طریق وب‌سرویس هست، اما بجای اینکه مثلن هر ۱۰ ثانیه سرور رو چک کنید (که علاوه بر مصرف بی‌دلیل نتورک و باتری گوشی، فشار بیشتری به سرور هم میاره)، سرور هنگام تغییرات یک Push Notification به دستگاه ارسال می‌کنه (قرار نیست Notification نمایش داده بشه) و به دستگاه میگه که اطلاعات جدیدی واست دارم و بیا خودت رو با من سینک کن، یا به عبارت ساده‌تر پس از دریافت پوش، همون وب سرویس که قبلن هر ۱۰ ثانیه صداش میزدید رو Call می‌کنید.

این روش نیاز به بازنویسی کلی ارتباط با سرور نداره و خیلی سریع میشه راه‌اندازیش کرد، اما Realtime نیست (میزان تاخیر، برابر با زمان رسیدن پوش به دستگاه و دریافت پاسخ از وب سرویس هست، در تست من چیزی حدود ۳ ثانیه بوده).

روش دیگه، همونطور که دوستان گفتن استفاده از ساکت (Socket) هست. البته از نظر من هیچ پیچیدگی خاصی از سمت کلاینت یا سرور نداره و اونطور نیست که خیلی سخت باشه.
Socket.io یک کتابخانه جاوااسکریپت هست که باهاش می‌تونید بر روی NodeJS همون چیزی رو که لازم دارید پیاده سازی کنید. کتابخانه اندرویدش هم موجوده و خیلی ساده و سر راست هست.

البته سمت سرور باید سازوکاری رو پیاده سازی کنید که از تغییرات در داده‌هایی که قراره کلاینت دریافت کنه مطلع بشید و اونها رو برای کلاینت بفرستید.

ASKaffash
چهارشنبه 30 خرداد 1397, 10:28 صبح
سلام
من به سه زبان VB6 و C# و Java برنامه های سوکتی برای تبادل نوشتم ولی از هم گیر دار تر Java ای هست خیلی هم تو نت بررسی کردم ولی خیلی نمونه پایدار پیدا نکردم ولی دوتا دیگه خیلی پایدار هستند اگر شما تجربه ای دارید ممنون می شوم راهنمائی کنید



یکی از روش هایی که میشه استفاده کرد و ساده‌تر هست و نیاز به تغییرات کمتری داره، Push to Sync هست. در این روش دریافت اطلاعات از سرور مثل قبل از طریق وب‌سرویس هست، اما بجای اینکه مثلن هر ۱۰ ثانیه سرور رو چک کنید (که علاوه بر مصرف بی‌دلیل نتورک و باتری گوشی، فشار بیشتری به سرور هم میاره)، سرور هنگام تغییرات یک Push Notification به دستگاه ارسال می‌کنه (قرار نیست Notification نمایش داده بشه) و به دستگاه میگه که اطلاعات جدیدی واست دارم و بیا خودت رو با من سینک کن، یا به عبارت ساده‌تر پس از دریافت پوش، همون وب سرویس که قبلن هر ۱۰ ثانیه صداش میزدید رو Call می‌کنید.

این روش نیاز به بازنویسی کلی ارتباط با سرور نداره و خیلی سریع میشه راه‌اندازیش کرد، اما Realtime نیست (میزان تاخیر، برابر با زمان رسیدن پوش به دستگاه و دریافت پاسخ از وب سرویس هست، در تست من چیزی حدود ۳ ثانیه بوده).

روش دیگه، همونطور که دوستان گفتن استفاده از ساکت (Socket) هست. البته از نظر من هیچ پیچیدگی خاصی از سمت کلاینت یا سرور نداره و اونطور نیست که خیلی سخت باشه.
Socket.io یک کتابخانه جاوااسکریپت هست که باهاش می‌تونید بر روی NodeJS همون چیزی رو که لازم دارید پیاده سازی کنید. کتابخانه اندرویدش هم موجوده و خیلی ساده و سر راست هست.

البته سمت سرور باید سازوکاری رو پیاده سازی کنید که از تغییرات در داده‌هایی که قراره کلاینت دریافت کنه مطلع بشید و اونها رو برای کلاینت بفرستید.

Nevercom
چهارشنبه 30 خرداد 1397, 12:01 عصر
خود Java کلاس Socket داره که راحت میشه ازش استفاده کرد. جستجو کنید نمونه کد زیادی پیدا می‌کنید، شاید این به دردتون بخوره: https://examples.javacodegeeks.com/android/core/socket-core/android-socket-example/

من از کتابخانه Socket.io در اندروید استفاده کردم، چون سرور رو هم با Socket.io پیاده‌سازی کردم. این آموزش خوبی هست: https://socket.io/blog/native-socket-io-and-android/