Као додатак водичу за мрежни клијент, овај туториал показује како имплементирати једноставан веб сервер у Питхон. Да будемо сигурни, ово није замена за Апацхе или Зопе. Постоје и робуснији начини за имплементацију веб сервиса у Питхон-у, користећи модуле попут БасеХТТПСервер. Овај сервер користи искључиво модул соцкет.
Сетићете се да је соцкет модул окосница већине Питхон модула веб услуга. Као и код једноставног мрежног клијента, изградња сервера са њим илуструје основе веб услуга на Питхон-у. БасеХТТПСервер сам увози соцкет модул да утиче на сервер.
Прегледом, све мрежне трансакције се одвијају између клијената и сервера. У већини протокола клијенти питају одређену адресу и примају податке.
Унутар сваке адресе може се покренути мноштво сервера. Ограничење је у хардверу. Уз довољно хардвера (РАМ, брзина процесора итд.), Исти рачунар може да служи као веб сервер, фтп сервер и сервер за пошту (поп, смтп, имап или све горе наведено) истовремено. Свака услуга је повезана са портом. Лука је везан за утичницу. Послужитељ слуша свој придружени порт и даје информације када се на тај порт приме.
Тако да утичете на мрежну везу морате знати хост, порт и радње дозвољене на том прикључку. Већина веб сервера ради на порта 80. Међутим, да би се избегао сукоб са инсталираним Апацхе сервером, наш веб сервер ће се покретати на порталу 8080. Да бисте избјегли сукоб с другим сервисима, најбоље је задржати ХТТП услуге на луци 80 или 8080. Ово су два најчешћа. Очито, ако се користе, морате пронаћи отворени порт и упозорити кориснике на промјену.
Као и код мрежног клијента, морате имати на уму да су ове адресе уобичајени бројеви портова за различите услуге. Све док клијент затражи исправну услугу на правом порту на правој адреси, комуникација ће се и даље одвијати. Гоогле-ових Услуга поште, на пример, у почетку није била покренута на уобичајеним бројевима портова, али зато што знају како приступити својим рачунима, корисници и даље могу добити пошту.
За разлику од мрежног клијента, све променљиве на серверу су жичане. Свака услуга за коју се очекује да се стално користи не би требало имати варијабле своје интерне логике постављене у командној линији. Једина варијација у овоме би била ако бисте, из неког разлога, желели да се услуга повремено покреће и на различитим бројевима портова. Ако је то случај, ипак бисте и даље могли да гледате системско време и мењате везивања.
Као што је већ споменуто, сервер мора знати домаћина којем ће се придружити и порт на коме ће слушати. У наше сврхе, услуга ће се уопште применити на било које име домаћина.
Лука, као што је раније поменуто, биће 8080. Зато имајте на уму да, ако овај сервер користите у сарадњи са мрежним клијентом, морат ћете променити број порта који се користи у том програм.
Да ли да затражите информацију или да је служите како бисте приступили Интернет, морамо да направимо утичницу. Синтакса овог позива је следећа:
Прва два су очигледно интернетски протоколи. Све што путује интернетом може се приступити овим породицама. Многе мреже и даље не раде на ИПв6. Дакле, ако не знате другачије, најсигурније је подразумевати ИПв4 и користити АФ_ИНЕТ.
Далеко су најчешћи типови СОЦК_СТЕАМ и СОЦК_ДГРАМ јер функционишу на два протокола ИП скупа (ТЦП и УДП). Последња три су много ређа и можда их није могуће увек подржати.
Након креирања утичнице, тада морамо подесити могућности утичнице. За било који објект соцкет можете поставити могућности соцкет помоћу методе сетсоцкопт (). Синтакса је следећа:
Ако желимо дати повратну информацију особи која зове сервер, сада бисмо могли да унесемо команду за штампање да потврдимо да је сервер покренут и покренут.
Након подешавања сервера, сада морамо да кажемо Питхон шта урадити када се на датом порту постави захтев. За ово упућујемо захтев по његовој вредности и користимо га као аргумент упорне петље.
Када је захтев постављен, сервер треба да прихвати захтев и креира објект фајла да би комуницирао с њим.
У овом случају, сервер користи исти порт за читање и писање. Због тога је макефиле методу дат аргумент 'рв'. Нулта дужина величине међуспремника једноставно оставља тај део датотеке да се динамички одреди.
Ако не желимо да креирамо сервер са једном радњом, следећи корак је читање уноса са објекта датотеке. Када то учинимо, требали бисмо бити пажљиви како бисмо уклонили тај улаз вишка слободног простора.
Захтев ће бити у облику радње, а затим странице, протокола и верзије протокола који се користи. Ако желите да послужите веб страницу, она дели овај унос да би дохватио тражену страницу, а затим ту страницу чита у променљиву која се затим уписује у објект датотеке датотеке соцкет. Функција за читање датотеке у речник може се наћи на блогу.
Да бисмо овај водич учинили мало илустративнијим што се може учинити са соцкет модулом, одустат ћемо од тог дела сервера и уместо тога показати како се може нијансирати презентација података. Следећих неколико редака унесите у поље програм.
Ако неко шаље веб страницу, први ред је леп начин за уношење података у веб претраживач. Ако је изостављено, већина веб прегледача ће подразумевано приказивати ХТМЛ. Међутим, ако га укључите, обавезно мора следити „ОК“ два нови карактери. Они се користе за разликовање података протокола од садржаја странице.
Синтакса првог реда, као што вероватно претпостављате, је протокол, верзија протокола, број поруке и статус. Ако сте икада прешли на веб страницу која се преселила, вероватно сте добили грешку од 404. Овде је порука 200 једноставно потврдна порука.
Остатак резултата је једноставно веб страница рашчлањена на неколико линија. Примијетићете да сервер може бити програмиран да користи корисничке податке у излазу. Завршна линија одражава веб захтев онако како га је примио сервер.
На крају, као закључна дела захтева, морамо да затворимо објект датотеке и соцкет сервера.
Сада спремите овај програм под препознатљивим именом. Након што га назовете са 'питхон програм_наме.пи', ако сте програмирали поруку да потврди да је услуга покренута, ово би се требало одштампати на екрану. Чини се да ће терминал онда паузирати. Све је како треба бити. Отворите веб претраживач и идите на лоцалхост: 8080. Тада бисте требали видјети излаз наредби за писање које смо дали. Имајте на уму да, због простора, нисам имплементирао руковање грешкама у овом програму. Међутим, сваки програм објављен у 'дивљини' би требао.