Аппараттық және бағдарламалық қамтамасыз етуді орнату

Мобильді қосымшалар үшін сервер бөлігін әзірлеу. Мобильді қосымшаларды әзірлеу: сервермен синхрондау Бағдарламаның серверлік жағын әзірлеу

488 IV бөлім. Мысалдардағы Ajax

боттарды қосады және жіберілген сұрау жолының мәніне негізделген жауап деректерін динамикалық түрде жасайтын серверді шақырады. LoaciXMLXSLTDoc() функциясының бірінші параметрі HTML пішіні O өрісінің мән анықтамасы арқылы жасалған сұрау жолымен біріктірілген XML құжатын жасайтын PHP бетінің URL мекенжайы.Екінші параметр - бұл файлда пайдаланылатын © XSLT файлының атауы. XML деректерін түрлендіру. LoadXMLXSLTDoc() функциясы үшін талап етілетін үшінші параметр іздеу нәтижелерін орналастыратын div элементінің идентификаторы болып табылады. Идентификатор нысан сілтемесі емес, шығыс элементінің жол атауы болып табылады; бұл жағдайда идентификатор ретінде «нәтижелер» жолы пайдаланылады.

Келесі қадамда веб-бетке индикаторлық кескінді қосу үшін DOM әдістерін қолданамыз. Кескін элементі © жасалады және кескін көзі төлсипаты O мәніне орнатылады. Бұл жасалған элемент нәтижелер div элементіне © қосылады. Осылайша, біздің функция пішіннің onsubmit оқиға өңдеушісінен шақырылғанда, кескін файлы бетте орналастырылады. Тұтастай алғанда, пайдаланушыға визуалды жасау маңызды кері байланыс- хабар немесе сурет, - өңдеу жүріп жатқанын көрсететін. Бұл пайдаланушының ешнәрсе болып жатқан жоқ деп ойлап, мүгедектік жіберу түймесін қайта-қайта басуына жол бермейді (Ajax процесі «көрінбейтін» екенін есте сақтаңыз).

Соңғы қадам ақпаратты серверге жіберу процесін бастайтын LoadXMLXSLTDoc () ® функциясын шақыру болып табылады. 12.4-бөлімде сипатталған LoadXMLXSLTDoc() функциясы серверден құжаттарды сұрайтын ContentLoader() нысанына шақыруды өңдейді. Шығару орнын параметр ретінде орнату арқылы (LoadXMLXSLTDoc() функциясындағы мәнді қатты кодтау орнына), біз қайта пайдалана аламыз бұл функциябөлуді қажет етпестен бір бетте функционалдықбірнеше процедураларды немесе if операторларын қосу. Сондықтан біз әртүрлі нәтижелерді қайта бағыттаймыз іздеу сұрауларыбеттің әртүрлі бөліктеріне. Дегенмен, мұның бәрін жасамас бұрын, серверде XML және XSLT құжаттарын қалай жасау керектігін көрейік.

12.3. Қолданбаның сервер коды: PHP

В Бұл бөлімде біз динамика жасаймыз PHP қолданатын XML құжаты, танымал ашық бастапқы сценарий тілі (өздеріңіз білетіндей, Ajax жүйесі кез келген серверлік тілмен немесе платформамен үйлесімді). XML құжаты дерекқорға қарсы клиенттік сұрауға жауап ретінде алынған нәтижелер жиынынан динамикалық түрде жасалады. Бұған қоса, серверде орналасқан және динамикалық файл сұралған сайын шығарылатын статикалық XSLT құжатын жасау жолын көрсетеміз. ContentLoader нысаны екі бөлек сұрауда сұралғанда, осы құжаттардың екеуі де клиентке тәуелсіз қайтарылады (Listing 12-7). XSLT клиенттік жағындағы динамикалық XML құжатымызды түрлендіреді және пайдаланушыға көрсетілетін HTML кестесін жасайды.

12-тарау XSLT 489 арқылы тікелей іздеу

12.3.1. XML құжатын жасау

XSLT пайдаланатындықтан, XSL файлы стандартты түрлендіруді орындай алатындай ақпараттың қарапайым жазбасы болып табылатын құрылымдық XML құжаты қажет. Бұл жобада клиент PHP файлын сұраған кезде динамикалық XML файлын жасаймыз.

XML құрылымын дамыту

XML файлын жасауды бастамас бұрын, оған үлгі жасау керек. Бұл үлгі іздеу арқылы қайтарылған деректер құрылымын көрсетуі керек. Таңдалған тапсырма мәлімдемесінде (телефон кітапшасы) біз компанияның атын, байланыс атын, елді және телефон нөмірі. 12-3 тізімі төрт өрісті қамтитын негізгі XML үлгісін көрсетеді.

Листинг 12.3. Негізгі XML файлы

Компанияның Аты байланыс аты ел атауы телефон нөмірі

Бірінші элемент - телефон кітапшасы. Келесісі сұрауда табылған барлық байланыс нөмірлерімен байланыстырылған барлық мәліметтері бар ішкі элементтерді қамтитын жазба элементі. Егер бізде бес нәтиже болса, XML құжатында бес енгізу элементі болады. Компанияның атауы компания элементінде көрсетіледі. Сонымен қатар, біз байланыс тұлғасының аты-жөнін, елдің атын және телефон нөмірін қостық. Біз шектеліп қана қоймаймыз көрсетілген өрістер; Көрсеткіңіз келетін ақпаратқа байланысты өрістерді қосуға немесе жоюға болады.

Нәтиже табылмаса, ескерту хабарын көрсетудің орнына пайдаланушыға осы ақпаратты көрсететін элемент жасауға болады. STO бізге нәтижені пайдаланушыға қайтаруды жеңілдетеді және талап етпейді қосымша кодқолданбаның клиенттік жағында. 12-4-тізімдегі код 12-3-тізімдегі кодпен дерлік бірдей, бірақ бұл жолы біз нәтижелер табылмағанын көрсету үшін пайдаланушыға көрсеткіміз келетін XML элементтеріне мәтін енгіземіз.

Листинг 12.4. Нәтижелері жоқ XML файлы

нәтиже жоқ

// O Компания атауының орнына "No R e s u l t s" көрсетеді Жоқ

490 IV бөлім. Аяксин мысалдары

// © Қалған өрістер "Жоқ" дегенге ауыстырылады

Жоқ

Жоқ

Бұл кодпен біз пайдаланушыға сұралған ақпараттың жоқ екенін айтатын бір жолды көрсетеміз. Компанияның O дескрипторы нәтижелердің жоқтығын көрсететін ақпаратты көрсетеді. Басқа дескрипторлар 0 пайдаланушыға ақпарат жоқ екенін айтады. «Жоқ» («қолжетімсіз») мәтінін көрсеткіміз келмесе, оның орнына кесте ұяшықтарын көрсететін үзілмейтін бос орынды қоса аламыз. Егер біз мүлде ақпарат қоспасақ, кестедегі ұяшықтар пайда болмас еді.

Көріп отырғаныңыздай, XML пішімі өте қарапайым құрылымға ие. Егер бұл XML файлы статикалық болса, пайдаланушыға файлға жаңа жазылушыны қосу оңайырақ болар еді. Ол динамикалық түрде жасалғандықтан, нәтиже жиынынан XML құжатын жасайтын цикл қажет.

Динамикалық XML құжатын жасау

Әдеттегідей серверде XML құжатын жасаймыз. Мысалдардағы әртүрлі сервер тілдерін пайдалану саясатына сәйкес осы тараудың сервер коды PHP тілінде жазылған. Тағы бір рет еске сала кетейік, Ajax құрылымын кез келген сервер тілінің көмегімен жасауға болады, және біз егжей-тегжейлі айтпастан тек серверлік кодты іске асыру принципін сипаттаймыз. Сонымен, 12-5 листинг қолданбаның серверлік жағының кодын көрсетеді. Код сұрау жолының параметрін қабылдайды және көптеген дерекқор сұрауларының нәтижелерін жасайды. Содан кейін сұрауға жауап ретінде қайтарылған әрбір телефон нөмірі үшін 12.4 листингінде көрсетілгендей XML файлында элемент жасай отырып, нәтижелер жиынын қайталаймыз.

Листинг 12.5. phoneXML.php сценарийі: серверде XML құжатын жасау

// MIME түрін жариялау туралытақырып («Мазмұн түрі: мәтін/xml»); жаңғырық("\n");

// © Дерекқорға қосылу

$db = mysql_connect("localhost", "ajax", "әрекет"); rnysql_select_db("ajax",$db);

$нәтиже = mysql_query («ТАҢДАУ *

FROM контактілерден WHERE ContactName "%" сияқты. // © Сұранысты толтырыңыз

$_GET["q"] ."%"",$db); ?>

// O Нәтижелерді тексеру

егер ($myrow = mysgl_fetch_array($нәтиже)) ( істеу (

// © Нәтижелер жиыны арқылы цикл

12-тарау XSLT 491 көмегімен Live Search

001">

)while ($myrow - mysql_fetch_array($нәтиже)); )басқа(

телефон кітапшасы, немесе «Нәтиже жоқ» 0 хабарламасын шығарыңыз.

12.3.2. XSLT құжатын жасаңыз

XSLT көмегімен біздің XML файлымызды бірнеше жол кодтары бар әдемі HTML кестесіне түрлендіруге болады. XSLT құжаты деректерді кез келген қажетті пішімде көрсету қажет болса, үлгіні сәйкестендіруге мүмкіндік береді. Үлгіні сәйкестендіру деректерді көрсету үшін үлгі құрылымын пайдаланады. Сонымен қатар, біз ағаштың түйіндері арқылы өтеміз

492 IV бөлім. Мысалдардағы Ajax

XSLT көмегімен көз. XSLT құжаты құрылымдық XML файлын алып, оны көруге, жаңартуға және өзгертуге оңай пішімге түрлендіреді. Біздің жағдайда XSLT құжаты статикалық түрде анықталған.

XSLT құрылымы

XSLT түрлендіруінде бастапқы ағашты тағайындалған ағашқа аудару ережелері бар. Бүкіл XSLT процесі үлгі құрылымына сәйкес келеді. Бастапқы ағаштың элементтері берілген құрылымға сәйкес келгенде, құжат үлгісіне сәйкес тағайындау ағашы жасалады.

Тағайындалған ағаштың құрылымы бастапқы ағаштың құрылымымен байланысты болуы міндетті емес. Сондықтан түпнұсқа XML файлын кез келген қажетті пішімге түрлендіруге болады. Деректер жиынының тек кестелік көрінісін пайдалану қажет емес.

XSLT түрлендіруі мәнерлер парағы деп аталады, себебі ол нәтиже ағашының стилін анықтайды. Стиль кестесі екі бөліктен тұратын үлгі ережелерін қамтиды. Бірінші бөлім - бастапқы ағаштың түйіндері салыстырылатын үлгі құрылымы. Сәйкестікті тапқаннан кейін XSLT процессоры екінші бөлікті пайдаланады - бастапқы ағашты құру үшін дескрипторлары бар үлгі.

XSLT құжатын жасаңыз

Берілген жоба үшін XSLT түрлендіруін жасау салыстырмалы түрде қарапайым. Біз кестені алатындықтан, ешқандай сәнді үлгіні сәйкестендіру қажет емес; біз бастапқы ағаштың барлық элемент түйіндері арқылы жай ғана дәйекті түрде өтеміз. Төменде біз төрт бағаннан тұратын HTML кестесін жасайтын үлгіні әзірлейміз. Осы жобаға сәйкес XSLT файлы 12-6 тізімде көрсетілген.

i Листинг 12.6. XSLT файлы

"ISO-8859-l"?>

// О XML нұсқасын және кодтауды орнату

// © XSLT аттар кеңістігін орнатыңыз"http://www.w3.org/1999/XSL/Transform">

// © Үлгі ережелерін орнатыңыз

// Кесте элементін қосу туралы

// © Тақырып жолын жасаңыз

12-тарау XSLT 493 арқылы тікелей іздеу

// 0 Телефон кітапшасының элементтерін ретімен өту

select="телефон кітапшасы/енгізу"> // © Шығаруды пішімдеу

компания байланыс Ел телефон

XSLT түрлендіруін жасаған кезде, XML O кодтауын және нұсқасын көрсетуіңіз керек және XSLT © аттар кеңістігін көрсетуіңіз керек. Атау кеңістігі құжат сәйкес келетін ережелер мен сипаттамаларды анықтайды. XML аттар кеңістігіндегі элементтер бастапқы құжатта танылады, бірақ нәтиже құжатында танылмайды. xsl префиксі XSLT аттар кеңістігіндегі барлық элементтерімізді анықтау үшін пайдаланылады. Содан кейін үлгі ережесін орнатуға болады - бүкіл құжатқа сәйкес құрылымды / © іздеңіз.

Енді біз нәтижелерімізді көрсететін кесте үлгісін жасауға кірісе аламыз. Идентификаторды кестеге салыстыратын O кесте дескрипторын қосамыз. Одан кейін пайдаланушыға кестеде қандай ақпарат бар екенін көрсететін бағандардың атаулары бар © кесте тақырыбының жолы келеді.

Бастапқы ағаштың түйіндерінің жиыны арқылы дәйекті түрде өтіп, кестенің қалған жолдарын аламыз. Бұл жағдайда телефон кітапшасында/жазбасында орналасқан түйіндерді шығару, жазбаларды өңдеу процесінде for-her © циклі пайдаланылады.

Құжаттар ағашын дәйекті түрде айналып өтетіндіктен, баған мәндерін таңдау керек. Түйіндерден мәндерді таңдау үшін XML элементінің мәнін шығару және оны түрлендірудің шығыс ағынына қосу үшін оператор мәні пайдаланылады. Мәтіні шығарылатын XML элементін көрсету үшін элемент атымен таңдау төлсипатын пайдаланыңыз. XSLT файлын жасап, XML құжатын динамикалық түрде жасау үшін кодты жасағаннан кейін, JavaScript кодын толтырып, XSLT түрлендіруін құрылымдық XML файлымен біріктіру оңай шолуға болатын кестеге әкелетінін көре аласыз.

Келесі қадамда HTTP жауабымен жаңа ғана жасаған файлдарды шығарып, клиент жағына қайта ораламыз.

Клиенттің серверлік бөлігін әзірлеу- сервер қолданбасыархитектуралық дизайннан басталады. Көп нәрсе архитектураға байланысты: қолданбаның кеңеюінен оның өнімділігіне және қолдау/техникалық қызмет көрсетудің қарапайымдылығына дейін.

Ең алдымен, деректердің серверге қалай орналастырылатынын және клиенттен келетін сұраулар қалай өңделетінін анықтау керек. Сондай-ақ серверлік деректерді кэштеуді ұйымдастыруды ойластыру қажет.

Деректер алмасу хаттамалары мен деректерді беру форматтары туралы шешім қабылдау қажет.

API (application programming interface) – интерфейс қолданбалы бағдарламалау. Неғұрлым түсінікті тілде бұл серверге сұраныстар жиынтығы, соңғысы оны түсінеді және дұрыс жауап бере алады. API сервер логикасының функционалдығын анықтайды, ал API бұл функцияның жүзеге асырылу жолын қысқартуға мүмкіндік береді. Басқаша айтқанда, API жалпы клиент-сервер инфрақұрылымының қажетті бөлігі болып табылады.

JSON және XML салыстырыңыз. Қолдану түріне байланысты хаттамаларға мысал келтіріңіз.

Көп ағынды

Қазіргі бағдарламалаудың негізгі аспектілерінің бірі - көп ағындылық. Көп ағынның көмегімен біз бір уақытта әртүрлі тапсырмаларды орындайтын қолданбадағы бірнеше ағындарды ажырата аламыз.

Multithreading платформаның қасиеті болып табылады (мысалы, операциялық жүйе, виртуалды машинат.б.) немесе операциялық жүйеде пайда болған процестің «параллельді» орындалатын бірнеше ағындардан тұруы мүмкін екендігінен тұратын қолданба, яғни уақыт бойынша белгіленген тәртіпсіз.

Көп ағындылықтың мәні бір орындалатын процесс деңгейіндегі квази-көп тапсырмалылық болып табылады, яғни барлық ағындар процестің адрестік кеңістігінде орындалады. Сонымен қатар, процестің барлық ағындарында жалпы адрестік кеңістік қана емес, сонымен қатар жалпы файл дескрипторлары болады. Іске қосылған процесте кемінде бір (басты) ағын бар.

Көп ағынды (бағдарламалау доктринасы ретінде) көп тапсырманы немесе көп өңдеуді шатастыруға болмайды, дегенмен көп тапсырманы жүзеге асыратын операциялық жүйелер көп ағынды да жүзеге асыруға бейім.

Бағдарламалауда көп ағынның артықшылықтарына мыналар жатады:

Кейбір жағдайларда жалпы мекенжай кеңістігін пайдалану арқылы бағдарламаны жеңілдету.

Процесске қатысты ағынды жасауға аз уақыт жұмсалады.

Процессор есептеулері мен енгізу/шығару операцияларын параллельдеу арқылы процесс өнімділігін жақсарту.

Ағын(ағын) – орындалатын кодтың басқарылатын бірлігі. Ағынға негізделген көп тапсырмалы ортада барлық орындалатын процестерде міндетті түрде негізгі ағын болады, бірақ одан да көп болуы мүмкін. Бұл бір бағдарлама бірнеше тапсырмаларды асинхронды түрде орындай алатынын білдіреді. Мысалы, мәтінді өңдеу мәтіндік редакторбасып шығару уақытында, өйткені екі тапсырма әртүрлі ағындарда орындалады.

Кәдімгі процессорда ағынды басқару операциялық жүйемен өңделеді. Аппараттық үзіліс орын алғанша ағын орындалады, жүйелік қоңыраунемесе операциялық жүйе оған бөлінген уақыт біткенше. Осыдан кейін процессор ағынның күйін (оның контекстін) сақтайтын операциялық жүйе кодына ауысады немесе басқа ағынның күйіне ауысады, оған да орындауға уақыт бөлінеді. Осындай көп ағынмен бұл жеткілікті көп саны CPU циклдері контексттерді ауыстыратын операциялық жүйе кодына жұмсалады. Егер ағынды қолдау аппараттық құралда жүзеге асырылса, онда процессордың өзі ағындар арасында ауыса алады және идеалды жағдайда әр тактілік цикл үшін бір уақытта бірнеше ағындарды орындай алады.

– Уақытша көп ағынды (бір ағын)

– Бір мезгілде көп ағынды (бір уақытта бірнеше ағындар)

Көп ағынды бағдарламалау және кодты орындаудың кең таралған моделі ретінде бірнеше ағындарды бір процесс ішінде іске қосуға мүмкіндік береді. Бұл орындалу ағындары процестің ресурстарын ортақ пайдаланады, бірақ сонымен бірге өздігінен жұмыс істей алады. Көп ағынды бағдарламалау моделі әзірлеушілерге параллель орындаудың ыңғайлы абстракциясын береді. Дегенмен, мүмкін, технологияның ең қызықты қолданылуы оның көп процессорлы жүйеде параллель орындалуына мүмкіндік беретін бір процесске қолданылуы болып табылады.

Көп ағынды бағдарламаның бұл артықшылығы оның жылдам жұмыс істеуіне мүмкіндік береді компьютерлік жүйелер, оларда бірнеше процессорлар, бірнеше ядролары бар процессорлар немесе машиналар кластерінде - бағдарламаны орындау ағындары процестердің шын мәнінде параллель орындалуына табиғи түрде қарыз беретіндіктен. Бұл жағдайда бағдарламашы жарыс жағдайларынан және басқа интуитивті емес әрекеттерден аулақ болу үшін өте сақ болуы керек. Деректерді дұрыс өңдеу үшін орындалу ағындары деректерді дұрыс ретпен өңдеу үшін жиі кездесу процедурасынан өтуі керек. Орындау ағындары ортақ деректердің бір уақытта өзгертілуін немесе модификация процесі кезінде оқылуын болдырмау үшін мутекстерді де қажет етуі мүмкін (олар жиі семафорлар арқылы жүзеге асырылады). Мұндай примитивтерді абайсыз пайдалану тығырыққа әкелуі мүмкін.

Көп ағынды қолданудың тағы бір түрі, тіпті бірпроцессорлық жүйелер үшін де, қолданбаның енгізуге жауап беру мүмкіндігі. Бір ағынды бағдарламаларда орындаудың негізгі ағыны ұзақ орындалатын тапсырманы орындау арқылы бұғатталған болса, бүкіл қолданба мұздатылған күйде болуы мүмкін. Ұзақ орындалатын тапсырмаларды негізгі ағынмен параллель жұмыс істейтін жұмыс ағынына жылжыту арқылы тапсырмалар орындалып жатқанда қолданбалардың пайдаланушы енгізуіне жауап беруін жалғастыру мүмкін болады. фон. Екінші жағынан, көп жағдайда көп ағындылық бағдарламаны жауап берудің жалғыз жолы емес. Дәл осыған асинхронды енгізу/шығару немесе UNIX жүйесіндегі сигналдар арқылы қол жеткізуге болады.

Көп тапсырманың екі түрі бар: процеске негізделгенжәне ағынға негізделген. Процесс негізіндегі және ағындық көптапсырманың айырмашылығы келесідей: процеске негізделген көптапсырма бағдарламаларды параллель орындау үшін ұйымдастырылған, ал ағын негізіндегі көптапсырма бір бағдарламаның жеке бөліктерін параллель орындауға арналған.

Ағынның екі түрі бар:

Алдыңғы ағындар немесе алдыңғы план. Әдепкі бойынша, Thread.Start() әдісі арқылы жасалған әрбір ағын автоматты түрде алдыңғы қатарға айналады. Бұл түріАғындар ағымдағы қолданбаны тоқтатудан қорғауды қамтамасыз етеді. Жалпы тілдің орындалу уақыты барлық алдыңғы ағындар аяқталғанша қолданбаны тоқтатпайды.

Фондық ағындар. Бұл түріағындар, сонымен қатар демон ағындары ретінде белгілі, жалпы тілдің орындалу уақыты кез келген уақытта еленбейтін кеңейтілетін орындау жолдары ретінде қарастырылады. Осылайша, барлық алдыңғы ағындар аяқталса, қолданба домені жүктелген кезде барлық фондық ағындар автоматты түрде жойылады. Фондық ағындарды жасау үшін IsBackground сипатын шын мәніне орнату керек.

Жіптердің күйлері туралы айтыңыз: жүгіру, ілулі, жүгіру, бірақ бір нәрсені күту.

Тақырыпты синхрондау мәселесі және ортақ ресурстар.

Жіптің өзара әрекеттесуі

Көп ағынды ортада параллель орындалатын ағындар арқылы бірдей деректерді немесе құрылғыларды пайдаланумен байланысты мәселелер жиі кездеседі. Мұндай есептерді шешу үшін мутекстер, семафорлар, критикалық бөлімдер және оқиғалар сияқты ағынның өзара әрекеттесу әдістері қолданылады.

Мутекссинхрондау нысаны болып табылады, ол кез келген ағынмен қамтылмаған кезде арнайы сигналдық күйге орнатылады. Бұл нысанды кез келген уақытта тек бір ағын иеленеді, демек, мұндай нысандардың атауы (ағылшын тілінен өзара эксклюзивті қатынас - өзара эксклюзивті қатынас) - ортақ ресурсқа бір мезгілде қол жеткізу алынып тасталады. Барлық қажетті әрекеттерден кейін басқа ағындарға ортақ ресурсқа кіруге мүмкіндік беретін мутекс шығарылады. Нысан сол ағынмен екінші рет рекурсивті түсіруді қолдай алады, ағынды блоктамастан есептегішті ұлғайтады, содан кейін бірнеше шығарылымдарды қажет етеді. Бұл, мысалы, Win32-дегі маңызды бөлім. Дегенмен, бұған қолдау көрсетпейтін кейбір іске асырулар бар және рекурсивті түсіру әрекеті кезінде ағынды тығырыққа тірейді. Бұл Windows ядросындағы FAST_MUTEX.

семафорларресурс пулы бос болғанша бір уақытта бірнеше ағындар арқылы алуға болатын қолжетімді ресурстарды көрсетеді. Содан кейін қосымша ағындар ресурстардың қажетті көлемі қайтадан қол жетімді болғанша күтуі керек. Семафорлар өте тиімді, өйткені олар ресурстарға бір мезгілде қол жеткізуге мүмкіндік береді.

Оқиғалар. «Сигнал берілген немесе жоқ» 1 бит ақпаратты сақтайтын объект, онда «сигнал», «сигналсыз күйге қалпына келтіру» және «күту» операциялары анықталады. Белгіленген оқиғаны күту - бұл жіптің орындалуын дереу жалғастырумен операцияның болмауы. Сигналсыз оқиғаны күту басқа ағын (немесе ОЖ ядросындағы үзу өңдеушісінің екінші фазасы) оқиға туралы сигнал бергенше ағынның орындалуын тоқтатады. «Кез келген» немесе «барлығы» режимдерінде бірнеше оқиғаны күтуге болады. Сондай-ақ, бірінші және жалғыз күту ағынын оятқаннан кейін сигналсыз күйге автоматты түрде қалпына келтірілетін оқиғаны жасауға болады (мұндай нысан «сыни бөлім» нысанын іске асыру үшін негіз ретінде пайдаланылады). MS Windows жүйесінде пайдаланушы режимінде де, ядро ​​режимінде де белсенді қолданылады. Linux ядросында kwait_queue деп аталатын ұқсас нысан бар.

Сыни бөлімдерсыни бөлімдерді көрсететін нысандар бір процесте қол жетімді болатынын қоспағанда, мутекстер сияқты синхрондауды қамтамасыз етеді. Оқиғаларды, мутекстерді және семафорларды бір процесс қолданбасында да пайдалануға болады, дегенмен кейбір операциялық жүйелерде (мысалы, Windows NT) маңызды бөлімдерді іске асыру өзара синхрондаудың жылдам және тиімді механизмін қамтамасыз етеді - алу және шығару критикалық бөлімдегі операциялар ОЖ ядросына апаратын жүйелік шақыруларды болдырмау үшін бір ағынды жағдайға оңтайландырылған (қайшылық жоқ). Мутекстер сияқты, маңызды бөлімді көрсететін нысан бір уақытта тек бір ағынмен ғана пайдаланылуы мүмкін, бұл оларды ортақ ресурстарға қол жеткізуді шектеуде өте пайдалы етеді.

Шартты айнымалылар(кондварлар). Оқиғаларға ұқсас, бірақ олар жадты алатын объектілер емес – тек айнымалының адресі пайдаланылады, «айнымалының мазмұны» түсінігі жоқ, шарт айнымалысы ретінде ерікті объектінің адресі пайдаланылуы мүмкін. Оқиғалардан айырмашылығы, айнымалы мәнде күтіп тұрған ағындар болмаса, шарт айнымалы мәнін сигналдық күйге орнату ешқандай нәтиже бермейді. Ұқсас жағдайда оқиғаны орнату оқиғаның өзінде «сигнал» күйін сақтауды талап етеді, содан кейін оқиғаны күтуді қалайтын кейінгі ағындар тоқтаусыз орындауды дереу жалғастырады. Мұндай нысанды толық пайдалану үшін «мутексті босату және шарттың айнымалысын атомдық түрде күту» операциясы да қажет. UNIX тәрізді операциялық жүйелерде белсенді қолданылады. Оқиғалар мен шарт айнымалыларының артықшылықтары мен кемшіліктері туралы талқылау оқиғалар мен шарт айнымалыларының артықшылықтары мен кемшіліктері туралы талқылаулардың маңызды бөлігі болып табылады. Windows жүйесінің кемшіліктеріжәне UNIX.

Енгізу/шығаруды аяқтау порты(IO аяқтау порты, IOCP). ОЖ ядросында енгізілген және жүйелік шақырулар арқылы қолжетімді, «құрылымды кезектің соңына қою» және «кезек басынан келесі құрылымды алу» операциялары бар «кезек» объектісі – соңғы шақыру орындауды тоқтатады. ағынның кезегі бос болса және басқа ағын қою шақыруын жасамайынша. IOCP-тің ең маңызды ерекшелігі - құрылымдарды пайдаланушы режимінен жүйелік шақыру арқылы ғана емес, сонымен қатар файлдың бірінде асинхронды енгізу-шығару операциясының аяқталуы нәтижесінде ОЖ ядросының ішіне жасырын түрде орналастыруға болады. дескрипторлар. Бұл әсерге қол жеткізу үшін «файл дескрипторын IOCP-мен байланыстыру» жүйелік шақыруын пайдалану керек. Бұл жағдайда кезекке орналастырылған құрылымда енгізу-шығару операциясының қате коды, сондай-ақ осы операция сәтті болған жағдайда нақты енгізілген немесе шығыс байттардың саны болады. Аяқтау портын іске асыру құрылымды кезектен алғаннан кейін бір процессорда/ядрода орындалатын ағындардың санын шектейді. Нысан MS Windows жүйесіне тән және сервердегі кіріс қосылым сұраулары мен деректер бөліктерін өңдеуге мүмкіндік береді. бағдарламалық қамтамасыз етуағындар саны клиенттер санынан аз болуы мүмкін архитектурада (әрбір жаңа клиент үшін ресурс шығындары бар жеке ағынды жасау талап етілмейді).

Жіп пулы

Жіп пулы туралы айтыңыз

Қолданбаның серверлік жағын әзірлеу

Кіріспе

Интернетте болу қазіргі заманғы компаниялар үшін қажеттілікке айналды. Онсыз тұтынушылармен толыққанды өзара әрекеттесу құру мүмкін емес. Көбінесе мұндай мәселені шешу үшін олар клиент-сервер қосымшаларын жасауға жүгінеді. Олардың әрқайсысы клиент бөлігінен және бэк-эндтен тұрады. Соңғы термин білдіреді сервер бөлігіқолданбалар. Болашақта мобильді бағдарламаның мазмұнын өз бетінше өзгерту қажет болса, онда Back-end әсіресе жоғары сапамен жасалуы керек. Appomart қойылған міндеттердің талаптарға сәйкес орындалуына кепілдік береді. Сондықтан, серверлік қосымшаларды жасауға тапсырыс бергенде, сіз дұрыс нәтижеге сенімді бола аласыз.

Back-end не үшін қажет?

Клиент-сервер қосымшаларын әзірлеу екі бөлікті құруды қамтиды. Бірінші, Front-end, пайдаланушылардың сұрауларын қабылдайды. Ол экрандардан көрінеді мобильді құрылғыларклиенттер. Екіншісі, серверлік қосымша, қабылданған сұраныстарды өңдейді және әкімшілік панель ретінде әрекет етеді. Мұнда деректер базасы мен бағдарлама логикасы сақталады. Бұлсыз ештеңе жұмыс істемейді. клиент-сервер қолданбасы. Шын мәнінде, бэк-энд бағдарламаның жүрегі болып табылады. Бұл тұтынушылардың сұраныстарын өңдеуге, қолданбаның жылдамдығына жауап беретін интеллект. Сондықтан серверлік қосымшаның архитектурасы ең кішкентай бөлшектерге дейін ойластырылған болуы маңызды, сондықтан тіпті жоғары жүктелген қызметтер біркелкі және жылдам жұмыс істейді.

Бағдарламалау тілін қалай таңдауға болады?

Дайындықта техникалық тапсырма(жобаға арналған жұмыс құжаттамасының бөліктері), сәулетші мәліметтер қоры жүйесін және сілтемелерін жобалайды, объектілерді және олардың қасиеттерін сипаттайды және қажетті сервер әдістерін әзірлейді (сервермен байланысқан кезде мобильді қосымшалардың «пайдаланатынын» сұрайды).

Құжаттаманың және тоқтатылған жобалардың маңыздылығы

Appomart-қа басқа мердігерлер бір немесе басқа себептермен «тастап кеткен» тұтынушылар жиі хабарласады. Біз біреудің, кейде тіпті дұрыс жұмыс істемейтін жобасын аламыз, біз оның аудитін жүргіземіз, содан кейін қайта қарап, қолдау көрсетеміз. Оқу процесінде бастапқы коджәне тапсырыс берушіден алынған материалдар, біз көптеген әзірлеушілер клиентті өздерімен байланыстыру үшін сервер әдістерін әдейі құжаттамайтындығымен бетпе-бет келдік, себебі жобаны басқа әзірлеушіге қолдау көрсетуге аударуға жұмсалатын еңбек шығындарының сәйкес келмеуі салдарынан сервер бөлігі үшін құжаттаманың жоқтығына, кейде жай ғана кәсіпқойсыздыққа байланысты. Бұл факт, өкінішке орай, қайғылы ғана емес, сонымен қатар кең таралған. Бұл жағдайда тапсырыс беруші жобаны қолдаудың тиімділігін, ыңғайлылығын және орындылығын бағалау мүмкін болмас бұрын, бар жобаның құжаттамасын әзірлеуге, сондай-ақ бастапқы кодтың аудитіне ақы төлеуі керек. Appomart кейінірек пайдалану үшін Postman және Swagger қолдайтын пішімдегі бэк-энд әдістерінің электрондық құжаттамасын жүргізеді.

Келісімшартқа қол қоймас бұрын мердігерді қалай тексеруге болады?

Мердігерді мұқият таңдап, тек қана тартымды бағаға ғана емес, сонымен қатар жобамен бірге алатын құжаттар тізіміне, сондай-ақ бастапқы кодты беру шарттарына және кодты жабуға назар аударуға шақырамыз. түсініктемелер, дерекқор схемалары (бұл Mongo DB немесе MySQL болсын). Табыстың кілті, әдетте, жұмыстың әрбір кезеңі аяқталғаннан кейін сізге берілетін материалдарға қойылатын талаптарды нақты көрсететін құзыретті жұмыс құжаттамасы болып табылады.

Әзірлеу ерекшеліктері

серверге арналған PHP

Қолданбалардың серверлік жағын құру («аппараттық құрал» немесе компьютерлер сияқты серверлермен шатастырмау керек, өйткені біз бағдарламалық жасақтама жағы туралы айтып отырмыз) сервер жағында қолданылатын бағдарламалау тілін білу және арнайы кәсіби дағдыларды қажет етеді. Клиент-сервер қосымшаларының мысалдарына қарасақ, РНР танымал екенін көреміз. Бұл серверлік қосымшаларды әзірлеуде сөзсіз көшбасшы. Әлемдегі сайттардың жартысынан көбі осы тілде бір немесе басқа конфигурацияда жазылған. РНР-ді әзірлеу және қолдау оңай, сонымен қатар PHP-де дамуды тездететін арнайы фреймворктар бар.

Рамка

Framework( бағдарламалық платформа) - абстракция деңгейін ұйымдастыру және арттыру үшін пайдаланылады, бұл жобаны икемді және ауқымды етеді. Дегенмен, жобаның жұмыс құжаттамасын терең талдау негізінде негізді дұрыс таңдау керек екенін түсіну керек, онсыз сапалы өнімді әзірлеу мүмкін емес.

Delphi, JAVA, Python

Back-end жасау үшін қолданылатын басқа тілдер бар. Сонымен, жылы құрылған Delphi ортасысерверлік қолданбалар. Оның көмегімен бағдарлама жақсартылған отладка алады, сонымен қатар оны қоршаған ортада қалыптастыру оңай бірегей бағдарламалар, қарастырылған визуалды жасау, бұл әдемі, түсінікті және жасауға мүмкіндік береді пайдаланушыға ыңғайлы интерфейс. Java серверлік қосымшалары да танымал болды. Олар оңай толықтырылады, кез келген платформада оңай орындалады және лайықты қауіпсіздік деңгейіне ие. Тағы бір танымал тіл - Python. Оның көмегімен серверлік қосымшалар тез, қарапайым, елеулі шығындарсыз жасалады.

Тарату

Клиент-сервер қосымшаларын құру корпоративтік ортада сұранысқа ие. Жиі ұқсас бағдарламаларжұмыс топтары немесе құру үшін пайдаланылады ақпараттық жүйелеркәсіпорын ішінде. Басым көпшілігі мобильді қосымшаларклиентпен байланысты қолдау үшін де ұқсас архитектура бар. Танымалдығы сервер мүмкіндіктерін пайдалану желі жүктемесін азайта отырып, жүйені басқаруды және тұтастығын қамтамасыз етуге мүмкіндік беретіндігіне байланысты.

Біз жоғары сапалы және уақытылы Android, iOS үшін клиент-сервер қосымшасын жасаймыз

Кілтке тапсыру

Appomart бағдарламашылары әртүрлі деңгейдегі тапсырмаларды орындау үшін тәжірибелі және білікті. Біз де бірдей іске асырудамыз әлеуметтік желілер, жоғары жүктемелі бизнес жобалары немесе шағын стартаптарға арналған бағдарламалық құрал бөлігі. Қажет болса, біз қолданбаның клиент бөлігін жасаймыз Android басқару, бар қажеттіліктерге, талаптарға сәйкес iOS.

Appomart сайтындағы бэк-end

Біздің бағдарламашылар әртүрлі технологиялармен жұмыс істейді және оны бірдей жақсы орындайды. Appomart-та ​​сіз Java, PHP және Node.JS тіліндегі клиент-сервер қолданбасына тапсырыс бере аласыз. Жүйе талаптарыжобалардың әрқайсысы бойынша жеке талданады, бұл бағдарламаның оңтайлы орындалуын қамтамасыз етуге мүмкіндік береді. Біз Java, PHP және Node.JS клиент-сервер қолданбасын нөлден жасаймыз немесе жақсартулар мен жаңартуларға қолдау көрсету үшін барын аламыз. Жаңа сервер бөлігін әзірлеуге немесе бұрыннан барын қолдауға қызығушылық танытсаңыз, жұмыс құнының егжей-тегжейлі есебін және ынтымақтастық нұсқаларын алу үшін сұрау қалдырыңыз.

қарама - қарсы беті мобильді клиенттер- сервер.

Қосымша талаптар қолданбаның ерекшеліктеріне байланысты:
сервердің ауқымдылығы - SaaS үшін, келушілердің үлкен ағыны күтілетін әлеуметтік қолданбалар үшін бұл шарт міндетті болып табылады. Пайдаланушылар санына шектеулер бар немесе болжамды саны бар іскери қолданбалар үшін бұл сипат талап етілмейді;
интерактивтілік: бірқатар қосымшаларды хабарландыру механизмімен қамтамасыз ету қажет - қосымшаны (пайдаланушыны) белгілі бір оқиғалардың орын алуы туралы хабардар ету, пайдаланушыға хабарлама жіберу. Бұл меншікте, мысалы, алмасу жүйесі немесе болуы керек автоматты диспетчерТакси.
Open API: үшінші тарап әзірлеушілері құжатталған хаттама арқылы жүйенің функционалдығын пайдалана алады деп болжанады. Өйткені, клиент мобильді және сыртқы сервер қосымшасы бола алады.
басқа талаптар...

Команда
Жүйені әзірлеуге арналған жоба командасының құрамы келесідей болуы керек:
жоба менеджері: жобаны басқарады, бақылайды, тапсырыс берушімен тікелей әрекеттеседі;
серверлік қосымшаларды әзірлеуші: бизнес-логикалық серверді, дерекқорды әзірлейді, желілік протокол;
әкімші қолданба әзірлеушісі: әзірлейді веб-қосымша, пайдаланушы интерфейсісервер қосымшасын конфигурациялау және басқару;
Android клиент қосымшасының әзірлеушісі;
iOS клиенттік қосымша әзірлеушісі;
клиенттік қолданбаны әзірлеуші...
сынаушы: әкімші қолданбасы мен клиенттік қолданбаларды тексереді.

Мұқият оқырман сервер қосымшасын жазған жағдайда мұны байқайды GUI, мысалы, HTML5-де сақтауға болады. Бұл жағдайда клиенттік қосымшаларды әзірлеу қажет емес - пайдаланушы интерфейсін браузер қамтамасыз етеді. Бұл мақалада мұндай жағдай қарастырылмайды, біз мобильді құрылғыларға арналған «туған» (туған) қосымшаларды әзірлеу туралы айтып отырмыз.

Мен толық комплементі бар командада жұмыс істедім, бірақ шынайы болыңыз - әрқашан адам ресурстары мен бюджет мұндай команданы жинауға мүмкіндік бермейді. Ал кейде рөлдерді біріктіруге тура келеді: жоба менеджері + сервер қосымшасын жасаушы, клиенттік қосымшаны әзірлеуші ​​+ сынақшы.

Технологиялар, құралдар, кітапханалар
Мобильді клиенттік серверді әзірлеу үшін мен әдетте келесі «тегін» технологиялар стегін қолданамын:
Apache Tomcat сервлет контейнері болып табылады;
MySQL – ДҚБЖ;
Subversion – нұсқаларды басқару жүйесі;
Maven – жобаларды құрастыруды автоматтандыруға арналған фреймворк;
JUnit - қамтамасыз етеді;
Apache Log4j – журналдар кітапханасы;
Дженкинс - үздіксіз интеграциялық жүйе;
Күту - ORM (параметрлер, сипаттардағы конфигурация, xml файлдарыжәне аннотациялар)
hibernate-generic-dao - Google-дан DAO іске асыру, дерекқор деректерімен жұмыс істеудің негізгі әдістерін жүзеге асырады, әдістерде сүзу мен сұрыптауды жүзеге асыруды жеңілдетеді;
- аутентификацияны және авторизацияны (қауіпсіздікті), қызметтер мен бұршақтар контейнерін (xml файлдарындағы конфигурация және аннотациялар) жүзеге асыру, біз оны сынақтарды жасау кезінде де қолданамыз.

Жүйенің ерекшелігіне және оған қойылатын талаптарға байланысты деректер алмасу хаттамасын жүзеге асырудың 2 нұсқасының бірін қолданамын.
Кросс-платформа, жылдамдық, қарапайымдылық, тиімділік, ауқымдылық, ашық API қажет болғанда, мен Джерсиді қабылдаймын - REST веб-қызметтерін (RESTful Web қызметтері) жүзеге асыру. Бұл кітапхана JSON немесе/және XML пішімінде деректерді сериялауды пайдалануға мүмкіндік береді. REST конфигурациясы аннотациялар арқылы сақталады. Мобильді құрылғылармен алмасу үшін JSON пішімі оның клиенттік жағында жеңілірек іске асырылуы (осы себепті біз «классикалық» веб-қызметтерді пайдаланбаймыз), трафиктің аз мөлшері жасалғандықтан алынды. Джерси JSON-тың ең қолайлы «түріне» баптауға мүмкіндік береді.
Әйтпесе, егер сізге кросс-платформалық, жоғары өнімділік, қарапайымдылық, тиімділік, интерактивтілік қажет болса, мен қабылдаймын
Apache MINA - желілік қосымшаларды жасауға арналған құрылым,
Google protobuf — құрылымдық деректерді кодтау және декодтау кітапханасы. Деректер құрылымы *.proto тақырып файлдарымен анықталады, компилятор олардан Java класстарын жасайды (оларды басқа бағдарламалау тілдері үшін де генерациялауға болады: C++, Objective-C және т.б. платформалар аралық қасиетін қамтамасыз етеді). ;
java.util.concurrent – ​​стандартты пакетті пайдаланыңыз.
Бұл опцияны масштабтауға болады, бірақ оны бизнес логикасын ескере отырып, сәулет деңгейінде жобалау кезеңінде жоспарлау қажет.

Адамдарға қажетті қызметтерді немесе жұмыстарды орындауға тапсырыс беруге, ал ұйымдар өз кезегінде олар үшін өз ұсыныстарын қалдыруға мүмкіндік беретін нақты SaaS қызметі үшін технологияларды таңдау мысалын қолданып гипотетикалық тапсырманы қарастырыңыз - «Auknem Services аукционы». . Біз барлық негізгі талаптарды әдепкі бойынша қабылдаймыз. Бұл жүйеде тіркелу тегін және тегін екенін ескере отырып, оларға ауқымдылықты қосу қажет. Интерактивтілік туралы не деуге болады? Мердігерлерді (орындаушыларды) жаңа тапсырыстарды құру туралы хабардар ету және тапсырыс берушілерді өтінімде бір сәтте түскен ұсыныстар туралы хабардар ету жақсы болар еді. электрондық пошта. Осының негізінде біз енгізу үшін Apache MINA, Google протобуфын аламыз. Біз келесі сипатты қарастырамыз - Open API. Қызмет жалпыға қолжетімді, сондықтан сыртқы әзірлеушілер онымен интеграциялануға мүдделі болуы мүмкін делік. Күте тұрыңыз! Қарапайым емес. Apache MINA негізіндегі протокол толығымен іске асыруға байланысты және нюанстарды білмей интеграция ешбір жағдайда ашық емес. Мұндай жағдайда қай фактордың маңыздырақ екенін өлшеп, таңдау жасауға тура келеді.

Қорытынды
Мобильді құрылғы серверін жасау кезінде қандай технологияларды, кітапханаларды пайдаланғаныңызды білу маған қызық болар еді ұқсас жүйелер? Барлығы өзгереді, ештеңе мәңгілік емес, әр деңгейде өз артықшылықтары мен кемшіліктері бар баламалар бар: MySQL -
Мақала ұнады ма? Достарыңызбен бөлісіңіз!
Бұл мақала пайдалы болды ма?
Иә
Жоқ
Пікіріңізге рахмет!
Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
Рақмет сізге. Сіздің хабарламаңыз жіберілді
Мәтіннен қате таптыңыз ба?
Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!