დინამიკები: ახლა მოდით dive შევიდა განაწილების კოდი
და შევხედოთ კონტექსტში რომელშიც კოდი წერთ
იქნება ფუნქციონირებს.
ბოლოს დღეს, თქვენ აპირებს განახორციელოს
მთლიანად ვებ სერვერზე.
მაგრამ ჩვენ არ მიეწოდება თქვენ ჩონჩხი
კოდი რომ აქვს გარკვეული ფუნქციონალური, განსაკუთრებით დაკავშირებული ქსელის.
მოდით შევხედოთ.
>> ასე რომ, აქ მიმართ ყველაზე ფაილი არის bunch
მხატვრული შეამოწმოთ მაკრო მოთხოვნებს.
ახლა ეს არის მხოლოდ თვისება c, რომლის დროსაც შესაბამისად bunch of man გვერდები
თქვენ უნდა განსაზღვროს ზოგიერთი ამ მუდმივები უნდა იყოს ნამდვილი
ან უნდა იყოს უფრო კონკრეტული ციფრები ისე, რომ თქვენ გაქვთ გარკვეული ფუნქციები.
წინააღმდეგ შემთხვევაში, მათ უნდა გამოუცხადებელ და თქვენ არ აქვს.
ასე რომ მე ვაკეთებ ამ გზით კითხულობს კაცი გვერდებზე.
ახლა ქვემოთ ქვემოთ, ხაზები 15 გზით 17, ჩვენ
მთელი bunch of ლიმიტები განაცხადა.
>> და ჩვენ ნასესხები ამ საწყისი პოპულარული სერვერზე მოუწოდა Apache.
და ეს არის მხოლოდ ციფრები, რომ ვაპირებთ
ხ საერთო რაოდენობა ბაიტი, რომ დაშვებულია
სხვადასხვა კონტექსტში for HTTP მოთხოვნის რომ ბრაუზერში დაშვებული უნდა გამომიგზავნოთ.
შემდეგი, ჩვენ განსაზღვრავს ოქტეტი.
ახლა octet არის უბრალოდ ლამაზი გზა ამბობდა byte, რვა ბიტი.
თურმე yesteryear byte არ იყო აუცილებელი, რვა ბიტი,
ასე octet ყოველთვის რვა ბიტი.
ასე რომ, ამ შემთხვევაში ჩვენ მიღებული რა საერთო ქსელის
მსოფლიოს მოუწოდებს რვა ბაიტი octet.
>> აქ მე მითითებული, რომ ოქტეტი იქნება იყოს 512, ასე რომ ჰგავს ექსპერტიზის
როდესაც ვკითხულობთ რამოდენიმე ბაიტი დროს, აქაც,
ჩვენ ვაპირებთ, რომ წაიკითხოთ bunch of ოქტეტი დროს.
შემდეგი მთელი bunch of header ფაილი.
რა ვიცი, უნდა შეიცავდეს ამ?
ისე მე უბრალოდ წაიკითხა კაცი გვერდები რიგი ფუნქციები
რომ ჩვენ გამოვიყენებთ ამ განაწილების კოდი და მოიცავს პირობა
დამევალა.
>> და ახლა ჩვენ გვაქვს მონაცემები ტიპის.
ჩვენ განაცხადა octet იყოს char.
და ვნახავთ, მოგვიანებით, რომ ეს გამოყენებული კოდი.
და ჩვენ განაცხადა მთელი bunch of პროტოტიპები,
და ჩვენ ფეხით სწრაფად მეშვეობით თითოეული ეს ფუნქციები.
და ბოლოს, და ალბათ ყველაზე მნიშვნელოვანია, რომ შევინარჩუნოთ
იბადება ამ ეტაპზე ამბავი ის არის, რომ
რომლებიც, ფაქტობრივად მთელი bunch გლობალური ცვლადები
ზედა ფაილი, root, CFD, SFD, მოთხოვნა, ფაილი და სხეულის.
>> ზოგადად, გამოყენებით ამდენი გლობალური ცვლადები, ან გლობალური ცვლადები ყველა,
არ არის უკან პრაქტიკაში.
მაგრამ აღმოჩნდება, რომ ჩვენ ასევე გამოყენებით ტექნიკა მოუწოდა სიგნალი დამუშავება შემდეგ
კოდი, რომელიც საშუალებას გვაძლევს გამოვლენა, როდესაც პროფაილი ჰიტები რაღაც
როგორიცაა CTRL C და დახურეს სერვერზე gracefully.
და იმისათვის, რომ გავაკეთოთ gracefully და რეალურად თავისუფალი მეხსიერება,
ჩვენ უნდა ხელმისაწვდომობის ეს გლობალური ცვლადები.
>> და ახლა მოდით შევხედოთ მთავარი, რაც დისკები მთლიანად ამ პროგრამაში.
პირველი, ზედა აქ ჩვენ გაქვთ შეცდომა ნომერი ცვლადი
რომელიც, როგორც ჩანს, არ გვაქვს ტიპის, მაგრამ ეს
იმიტომ, რომ ეს რეალურად განსაზღვრულია ფაილი სახელად
შეცდომა errno.h რომელიც შედის უმაღლესი up.
თუ თქვენ აკეთებთ კაცი errno რეალურად იხილეთ განმარტება ამ რამ,
დაინახავთ, რომ ეს არის სპეციალური გლობალური ცვლადი რომ
არის მთელი bunch ფუნქციები არ წერია
ჩვენს მიერ, არამედ ავტორები Linux და სხვა სისტემების რეალურად მითითებული
რიგი რომ ცვლადი, როდესაც რაღაც მიდის არასწორი, ასე რომ შეგიძლიათ გლობალურად
გაერკვნენ, თუ რა გააკეთა წავიდეთ არასწორი.
>> ახლა ქვემოთ დაინახავთ new ტექნიკა ალბათ გამოყენებით getopt,
ფუნქცია, რომელიც ეხმარება გარჩევის ბრძანება ხაზი არგუმენტები ასე, რომ ჩვენ არ
გადაიტვირთოთ დროის გაყვანაა მჭიდროდაა თუ როგორ უნდა გარჩევის რაღაც 8080,
ან dash p, ან dash h დახმარების მისაღებად.
getopt არსებითად აკეთებს, რომ ჩვენთვის.
იხილეთ კაცი გვერდზე მეტი.
>> შემდეგი, ჩვენ გავაკეთებთ ცოტა შეცდომა შემოწმების დავრწმუნდეთ,
რომ პორტის ნომერი ფარგლებში მოცემულ დიაპაზონში სპეც.
შემდეგი, ჩვენ ვხედავთ ზარი ფუნქცია დაიწყოს, რომლის განმარტება ჩვენ გამოგიგზავნით
შევხედოთ ამ მომენტში, და როგორც მისი სახელი ვარაუდობს, ეს იწყება სერვერზე.
აქ ჩვენ გვაქვს ზარი ფუნქცია მოუწოდა სიგნალი, რომელიც ამბობს,
თუ და როდესაც გესმით Control C from მომხმარებლის კლავიატურის, წავიდეთ წინ და დაარქვით
ფუნქცია მოუწოდა დამმუშავებლის რომ აპირებს საბოლოო ჯამში, სუფთა რამ და შეწყვიტოს
სერვერზე.
>> ქვემოთ რომ არის ის, რაც, როგორც ჩანს, უსასრულო ციკლი, პირველი ხაზი, რომელიც
ეფექტურად არის მოწოდება ფუნქცია მოუწოდა
გადატვირთვის, რომელიც ჩვენ თვითონ განახორციელოს მოგვიანებით, რათა
უფასოა ზოგიერთი ჩვენი გლობალური სახელმწიფოები.
მას შემდეგ, რაც არის ხაზზე კოდი, რომელიც პირობითად
შემოწმების დაბრუნების ღირებულება დაკავშირებული.
ახლა დაკავშირებული ჰგავს ძირითადი, რაღაც რომ ბრუნდება ნამდვილი ან ყალბი.
და ეს ასეა, მაგრამ არსებობს რაღაც განსაკუთრებული დაკავშირებული
რომ ის დაბლოკვა ზარი.
იგი ზის იქ და დაველოდოთ სანამ მომხმარებლის ბრაუზერში
ცდილობს დაკავშირება ამ ვებ სერვერზე და მხოლოდ ამის შემდეგ იქნება ის
დაბრუნდეს ჭეშმარიტი ან ცრუ ისე, რომ ჩვენ გაგრძელება შიგნით ამ შემთხვევაში განცხადებაში.
>> კიდევ არსებობს, შეამჩნია ეს ფუნქცია ფუნქცია მოუწოდა გარჩევის, რომელიც ჩვენ წერდა,
რომელიც parses ყველა ოქტეტი, ყველა ბაიტი მოდის ბრაუზერი
სერვერზე, ასე რომ ჩვენ შეგვიძლია გადასცემს თქვენ უკან საბოლოოდ მნიშვნელობა ერთი
იმ გლობალური ცვლადები, მაღაზიები ყველა bytes მხოლოდ
სათაურებში, რომ მოთხოვნით, არა სხეული
თუ იყო რეალურად სხეულის იგი.
>> ახლა ქვემოთ ჩვენ ვიწყებთ გარჩევის იმ სათაურებში ამონაწერი
სუბსეტ ინფორმაცია რომ ჩვენ აღელვებს.
კერძოდ, პოსტი დაზუსტება, პირველ რიგში,
სასურველი მოითხოვოს ხაზი, რომელიც მხოლოდ ის, რომ ძალიან პირველი ხაზი, რომ
იმედია ამბობს რაღაც მისაღებად სლეში ან რამდენიმე გზა და მაშინ HTTP 1.1.
ჩვენ ამ მეტაფორის გამოყენების ნემსი წელს haystack
ვეძებთ კონკრეტული chars და მისამართები.
და მართლაც, არსებობს მთელი რიგი ფუნქციები ჩვენი სადისტრიბუციო კოდი
რომ თქვენ, ძალიან, შეიძლება სასარგებლო როცა ეძებს კონკრეტული ღირებულებებს.
>> საბოლოო ჯამში, ჩვენ კოპირება ამ bytes ცვლადში ხაზი,
რომელიც შეამჩნია, ძალიან, ჩვენ გვაქვს გამოყოფილი დასტის
გზით დინამიურად ზომის მასივი.
და ჩვენ მიზანმიმართულად ცდილობს რათა თავიდან ავიცილოთ მოუწოდებდა malloc
იმიტომ, რომ კიდევ ერთხელ, რადგან კონტროლის C მიმდინარეობს
პოტენციური თვისება ამ პროგრამის ჩვენ არ მინდა ამ კოდი მოულოდნელად
შეუშალა შესახებ hitting კონტროლის C, შედეგად, რომელიც
ის არის, რომ მე შეიძლება არ გვაქვს შანსი უფასოდ რაღაც მე malloced.
ასე ვცდილობ გამოიყენოთ როგორც ბევრი დასტის მე შეგიძლიათ აქ.
>> შემდეგი up, მთელი bunch of to dos.
დაზუსტება იქნება გაწერილი ზუსტად რა მოსალოდნელია აქ,
მაგრამ კომენტარები გაძლევთ მინიშნება რა ელის.
თქვენ უნდა შეამოწმოს მოთხოვნით ხაზი
და დარწმუნდით, რომ ეს ჰგავს სპეციფიკაციები გრამატიკა, ასე ვთქვათ,
ამბობს, რომ უნდა.
თქვენ მაშინ უნდა ამონაწერი რაღაც მოუწოდა შეკითხვაზე, პერსონალის
მას შემდეგ, რაც კითხვის ნიშნის, როგორიცაა ჩვენ ვნახეთ ჩვენს Google მაგალითად
in გავლის HD პარამეტრი.
ჩვენ მაშინ concatenate ერთად ძირეული სერვერზე
გეზი, რომელიც არის რომ მოთხოვნის პირველი ხაზი
და ჩამოყალიბდეს სრული გზა ფაილი ჩვენ გვინდა, რომ ვეძებოთ.
>> ამის შემდეგ, ჩვენ ვაპირებთ, რათა დავრწმუნდეთ, რომ ფაილი არსებობს და იკითხება.
და მაშინ ჩვენ ვაპირებთ ამონაწერი მისი ფაილის გაფართოება, და .html ან php,
ან რაღაც ასეთი გაფართოება, რომელიც არის იმ ბოლომდე სიმებიანი მოითხოვა.
შემდეგი up არის მთელი bunch of კოდი ჩვენ წერდა
რეალურად წარმოქმნის PHP გენერირებული შინაარსი თქვენთვის.
მოკლედ, ამ კოდი იღებს სახელი
ფაილი გსურთ PHP ინტერპრეტაცია.
ჩვენ გაიაროს ეს რაღაც მოუწოდა მილის PHP თარჯიმანიც.
დავუბრუნდეთ პასუხი, თითქოს პასუხი იყო ფაილი თავად.
და მაშინ ჩვენ iterate მეტი რომ ფაილი bytes, უბიძგებენ მათ ყველა ერთ ბუფერული
ასე რომ ჩვენ შეგვიძლია საბოლოოდ ბეჭდვა მათ.
>> რა თქმა უნდა, ყველა ეს მოუწოდებს აქ dprintf
საშუალებას გვაძლევს ბეჭდვა რაღაც მოუწოდა ფაილი descriptor, რომელიც
არის მთელი რიცხვი რომელიც წარმოადგენს ფაილი.
ძალიან მსგავსი სულისკვეთებით, მაგრამ ძირეულად განსხვავდება ფაილი
ვარსკვლავი მაჩვენებელი.
შეამჩნევთ, თუ როგორ შეგიძლიათ გამოიყენოთ სინტაქსის, როგორიცაა printf აქ, ასე რომ შემიძლია დინამიურად
ჩადეთ რაღაც სიგრძე ღირებულების HTTP header
მოუწოდა Content-Length.
და საბოლოო ჯამში, მე გამოიყენება ფუნქციის უფლება რეალურად წერენ
ორგანოს მოთხოვნით.
>> სამწუხაროდ, ჩვენ მხოლოდ განხორციელებული მხარდაჭერა დინამიურად
გამომუშავებული PHP ფაილი.
ჩვენ არ განახორციელოს მხარდაჭერა სტატიკური ფაილი, როგორიცაა gifs და jpegs,
და CSS და HTML ფაილი.
რომ, სამწუხაროდ, დარჩა თქვენ უპასუხოს კლიენტს მიზნით
ეს უნდა გააკეთოს.
ასე რომ, იქ თქვენ ნახავთ, რომ იქ არ გაცილებით შთაგონების ფარგლებში, რომ ბლოკი,
მაგრამ თუ ცოტა მაღალია up, როგორ წავედით შესახებ წერით PHP კოდი,
ფუნქციები თქვენ გამოიყენოს ცოტა განსხვავებული.
>> ფაქტობრივად, თქვენ შეგიძლიათ სესხის ზოგიერთი ფუნქციონალური
ალბათ ექსპერტიზის პრობლემა კომპლექტი, რადგან
ბოლოს დღეს, ყველა თქვენ უნდა აქ არის კიდევ ერთხელ იცით რა ფაილი ღია
და კიდევ თქვენ იცით, რომ ის ე.წ. MIME ტიპის ან content type,
თქვენ უნდა წაიკითხოთ იმ bytes და რატომღაც Spit მათ უკან.
>> და ახლა ტური ამ ფაილის სხვა ფუნქციები.
Up პირველი უკავშირდება, რომელიც უბრალოდ ბრუნდება ნამდვილი
როდესაც საბოლოოდ ესმის კავშირი საწყისი მომხმარებელს.
შემდეგი up არის შეცდომა.
შეცდომა, იმავდროულად, როგორც ფუნქცია ჩვენ წერდა გაუმკლავდეს ყველა სხვადასხვა 400
და 500 HTTP სტატუსის კოდები, რომ დაგვჭირდება
გაგზავნის უკან შესახებ, ერთად სტანდარტული გაგზავნა.
>> შემდეგი up დატვირთვის, განსაკუთრებით meaty ფუნქცია, რომლის მიზანი ცხოვრებაში
არის წაკითხვის ფაილი ვარსკვლავი მაჩვენებელი შინაარსი ფაილი შევიდა გლობალური ბუფერული
რომ ჩვენ განვაცხადეთ, გლობალურად ზემოთ [? მთავარი. ?]
ეს ცოტა რთული იმიტომ, რომ ჩვენ უნდა წაიკითხოთ bytes ფაილი
მაგრამ სანახავად ყოველ iteration თუ არა ჩვენ უკვე
მოხვდა ბოლოს ფაილი ან რაღაც წავიდა არასწორი.
ჩვენ ვიყენებთ realloc დავრწმუნდეთ, რომ რასაც ბუფერული ჩვენ გამოყენებით იზრდება
და იზრდება და იზრდება და ყოველთვის დარჩენის ადრე ბაიტების რაოდენობას
რომ ჩვენ უნდა მოერგოს არსებობს.
Handler, იმავდროულად, ფუნქცია, რომელიც იღებს
მოუწოდა გზით მქონე რეგისტრირებული Control C როგორც სიგნალი
ჩვენ გვინდა, რომ ჩაჭრა.
გაითვალისწინეთ, აქ კურატორმა ის, რომ საბოლოო ჯამში,
ზარი გაჩერება, რომელიც რა თქმა უნდა, აჩერებს სერვერზე.
და სამწუხაროდ, ძიება არ არის შესრულებული.
სული, ეს არის საკმაოდ მარტივი ფუნქცია.
მოცემული ფაილის გაფართოება, მას სჭირდება დაბრუნებას ის ე.წ. MIME
ტიპის ან შინაარსი ტიპის.
და ჩვენ დააკონკრეტა დაზუსტება რა, რომ რუკების უნდა იყოს.
მაგრამ თქვენ უნდა თარგმნოს ეს საბოლოო ჯამში c კოდი.
>> შემდეგი up არის ჩვენი მსგავსად meaty ფუნქცია მოუწოდა გარჩევის, რომლის მიზანი ცხოვრებაში
წაკითხვის, არ ფაილი, მაგრამ ქსელის კავშირი.
კერძოდ, კითხულობს და parsing HTTP მოთხოვნის, რომ მოდის ბრაუზერში
სერვერზე ისე, რომ საბოლოო ჯამში, ჩვენ შეგვიძლია გარჩევის
მხოლოდ სათაურებში მოთხოვნით ხაზი და დაბრუნდეს იმ თქვენ,
გზით გლობალური ბუფერული რომ ჩვენ განაცხადა ზემოთ [? მთავარი. ?]
>> გადატვირთვის, იმავდროულად, ფუნქცია, რომ ჩვენ განსაზღვროს
რომ იღებს ე.წ. iteratively შიგნით მთავარი ყოველ ჯერზე თქვენ შესახებ
მზად არის დაიწყოს მოსმენის ახალი კავშირი
ასე რომ, ჩვენ ყოველთვის ვიცით, სახელმწიფო ჩვენი ცვლადები
და ისე, რომ ჩვენ გვაქვს ასევე გაათავისუფლა ნებისმიერი მეხსიერების რომ
შეიძლება გამოიყო წინა ქსელის კავშირი.
შემდეგი up არის დაიწყოს, ფუნქცია, რომელიც ჩვენ წერდა
რომელიც შეიცავს მთელ ბევრი ქსელის კოდი
რომ საბოლოოდ იწყება სერვერზე.
>> ბოლო up ფუნქცია მოუწოდა გაჩერება, რომელიც
ზუსტად რომ, ის აჩერებს სერვერზე.
მაგრამ პირველი ის ათავისუფლებს up ნებისმიერი მეხსიერების რომ ჯერ კიდევ იქნა გამოყოფილი.
მაგრამ ეს საბოლოოდ მოუწოდებს გასასვლელი გარეშე კი დაბრუნების კონტროლი
ჩვენი მთავარი ფუნქცია.
საბოლოო ჯამში, ერთ-ერთი ყველაზე მნიშვნელოვანი ტექნიკა
როდესაც ახორციელებს ამ სერვერზე იქნება ცოტა სასამართლო და შეცდომა,
რომელსაც ერთი ბრაუზერის ფანჯარაში გახსნა უფლება და ტერმინალში ფანჯრის
მარცხენა, სერვერები console ფანჯარაში, ასე რომ თქვენ
ხედავთ შეტყობინებები, რომლებიც მიმდინარეობს ეკრანზე.
>> მაგრამ უკეთესი მაინც იქნება მესამე window, მეორე ტერმინალის ფანჯარა,
რომელშიც თქვენ იყენებთ Telnet, გამოყენების რისთვისაც ინიშნება სპეც.
და Telnet მხოლოდ ძალიან მარტივი ქსელის პროგრამა
რომელიც საშუალებას გაძლევთ პრეტენზია იყოს ბრაუზერში ერთ window
საუბრისას სხვა ფანჯარაში.
ამ გზით თქვენ შეგიძლიათ ნახოთ ზუსტად ტექსტობრივი ბრძანებები
რომ ბრუნდებიან სერვერის კლიენტი
გარეშე მოეშვები გარშემო chrome დეველოპერი
ინსტრუმენტები სხვაგვარად clunkier ინტერფეისი.