SPEAKER: Sekarang mari kita menyelam ke dalam kod pengagihan dan kita lihat pada konteks di mana kod yang anda menulis akan beroperasi. Pada akhir hari, anda akan melaksanakan keseluruhan pelayan web. Tetapi kita telah disediakan anda dengan rangka kod yang mempunyai beberapa fungsi, terutamanya yang berkaitan dengan rangkaian. Mari kita lihat satu. Jadi di sini ke arah bahagian atas fail adalah sekumpulan ciri menguji keperluan makro. Sekarang ini hanya ciri c, di mana mengikut sekumpulan halaman man anda perlu menentukan beberapa pemalar ini adalah benar atau untuk menjadi lebih nombor tertentu supaya anda mempunyai akses kepada fungsi-fungsi tertentu. Jika tidak mereka akan tidak diisytiharkan dan anda tidak akan mempunyai akses. Jadi saya telah melakukan ini dengan cara membaca halaman manusia. Sekarang ke bawah di bawah, di garis 15 melalui 17, kita mempunyai sejumlah besar had diisytiharkan. Dan kami telah dipinjam ini dari pelayan web popular dipanggil Apache. Dan ini adalah hanya nombor yang akan untuk menghadkan jumlah bait yang dibenarkan dalam pelbagai konteks untuk permintaan HTTP bahawa pelayar yang dibenarkan untuk menghantar saya. Seterusnya, kita menentukan octet. Sekarang octet yang hanya cara yang mewah daripada menyebut bait, atau lapan bit. Rupa-rupanya dalam tadi bait tidak semestinya lapan bit, jadi octet sentiasa lapan bit. Jadi dalam kes ini kita telah diterima pakai apa yang biasa dalam rangkaian dunia memanggil lapan bait octet satu. Di sini saya telah dinyatakan bahawa octet akan menjadi 512, supaya sama seperti dalam forensik apabila kita membaca sekumpulan bait pada satu masa, di sini juga, kita akan membaca sekumpulan octet pada satu masa. Seterusnya sejumlah besar fail header. Bagaimana saya tahu untuk memasukkan ini? Well, saya hanya membaca orang laman untuk beberapa fungsi bahawa kita akan menggunakan dalam pengagihan ini kod dan termasuk dalam orang-orang yang Saya telah diarahkan untuk. Dan sekarang kita mempunyai jenis data. Kami telah diisytiharkan octet untuk menjadi char a. Dan kita akan lihat nanti bahawa itulah digunakan di seluruh kod. Dan kami telah mengisytiharkan sejumlah besar prototaip, dan kami akan berjalan cepat melalui setiap fungsi-fungsi itu. Akhir sekali, dan mungkin yang paling penting yang perlu keberatan pada ketika ini dalam cerita, adalah bahawa terdapat , sebenarnya keseluruhan sekumpulan pembolehubah global di bahagian atas fail, akar, CFD, SFD, permintaan, fail dan badan. Sekarang umumnya, menggunakan begitu banyak global pembolehubah, atau pembolehubah global di semua, bukan amalan belakang. Tetapi ternyata kami juga menggunakan teknik pengendalian dipanggil isyarat kemudian dalam kod, yang membolehkan kita untuk mengesan apabila pengguna menekan sesuatu seperti CTRL C dan menutup pelayan anggun. Dan untuk berbuat demikian anggun dan benar-benar bebas memori, kita perlu mempunyai akses kepada pembolehubah global. Dan sekarang mari kita lihat utama, yang memacu keseluruhan program ini. Pertama, di bahagian atas di sini kita mempunyai nombor ralat pembolehubah yang nampaknya tidak mempunyai jenis, tetapi itu kerana ia sebenarnya yang ditakrifkan dalam fail yang dipanggil kesilapan yang errno.h dimasukkan sehingga lebih tinggi. Jika anda manusia errno untuk benar-benar lihat takrifan bagi perkara ini, anda akan melihat bahawa ini adalah satu pembolehubah global khas yang ditetapkan oleh sejumlah besar fungsinya tidak bertulis oleh kami, tetapi oleh pengarang Linux dan sistem lain untuk benar-benar menetapkan nombor kepada yang berubah-ubah apabila sesuatu pergi salah supaya anda boleh secara global memikirkan apa yang telah berlaku. Sekarang turun di bawah anda akan melihat baru teknik mungkin menggunakan getopt, fungsi yang membantu arahan hurai argumen baris supaya kita tidak perlu mengganggu masa membuang memikirkan bagaimana untuk menghuraikan sesuatu seperti 8080, atau p dash, atau dash h untuk mendapatkan bantuan. getopt dasarnya adakah itu untuk kami. Lihat halaman lelaki itu lebih. Seterusnya, kami melakukan sedikit kesilapan memeriksa untuk memastikan bahawa nombor port adalah dalam julat yang dinyatakan dalam spec. Seterusnya, kita melihat panggilan ke fungsi yang mula, yang definisi kami akan melihat dalam sekejap, dan sebagai namanya mencadangkan, ini bermula pelayan web. Di sini kita mempunyai panggilan ke fungsi dipanggil isyarat yang mengatakan, jika dan apabila anda mendengar Kawalan C daripada keyboard pengguna, pergi ke depan dan memanggil fungsi dipanggil pengendali perkara yang berlaku perkara yang akhirnya bersih dan berhenti pelayan. Di bawah adalah bahawa apa yang kelihatan sebagai satu gelung tak terhingga, baris pertama yang berkesan adalah panggilan untuk fungsi yang dipanggil menetapkan semula, yang kita diri kita sendiri melaksanakan di kemudian hari bagi untuk membebaskan beberapa negeri global kami. Selepas itu adalah garis kod yang bersyarat ialah memeriksa pulangan nilai yang disambungkan. Sekarang kelihatan berkaitan seperti predikat yang, sesuatu yang mengembalikan benar atau palsu. Dan ia, tetapi ada sesuatu yang istimewa dalam berhubung dalam bahawa itu panggilan sekatan. Ia akan duduk di sana dan menunggu sehingga pelayar pengguna cuba untuk menyambung ke web ini pelayan dan hanya kemudian akan ia kembali benar atau salah supaya kita teruskan untuk bahagian dalam ini jika kenyataan. Apabila di sana, melihat fungsi ini kepada fungsi dipanggil hurai, yang kita menulis, yang mem-parsing semua octet, semua daripada bait yang datang dari pelayar kepada pelayan, supaya kita boleh menyerahkan anda kembali akhirnya satu nilai kepada satu orang-orang pembolehubah global yang kedai semua bait dalam hanya tajuk itu permintaan, bukan badan jika terdapat sebenarnya badan kepadanya. Sekarang turun di bawah kita mula menghuraikan mereka header untuk mengekstrak subset maklumat bahawa kita mengambil berat tentang. Secara khususnya, setiap yang spesifikasi, kita pertama mahu meminta talian, yang merupakan hanya itu talian yang pertama yang mudah-mudahan mengatakan sesuatu seperti get mengurangkan atau beberapa jalan dan kemudian HTTP 1.1. Kami menggunakan metafora ini jarum dalam sisa rumput kering mencari tertentu aksara atau alamat. Dan sesungguhnya, ada beberapa fungsi dalam kod pengedaran kami bahawa anda juga mungkin mendapati membantu ketika mencari nilai-nilai tertentu. Akhirnya, kami menyalin bait ini ke garis ubah dikenali sebagai, yang perasan, terlalu, sudah tentu kita diperuntukkan pada timbunan melalui pelbagai dinamik yang bersaiz. Dan kita sengaja cuba untuk mengelakkan memanggil malloc kerana sekali lagi, kerana Kawalan C kerana ciri potensi program ini, kita tidak mahu mempunyai kod ini tiba-tiba diganggu oleh memukul pengguna Kawalan C, hasil yang adalah bahawa saya tidak mungkin mempunyai peluang yang untuk sesuatu yang percuma saya malloced. Jadi, saya cuba untuk menggunakan sebanyak daripada tindanan adalah saya boleh di sini. Selanjutnya, sejumlah besar kepada dos. Penentuan itu akan menjelaskan secara terperinci pada betul-betul apa yang diharapkan di sini, tetapi ulasan memberikan anda tanda-tanda bahawa apa yang akan berlaku. Anda perlu terlebih dahulu mengesahkan garis permintaan dan memastikan bahawa ia kelihatan seperti spesifikasi tata bahasa, boleh dikatakan, kata yang sepatutnya. Kemudian anda perlu untuk mendapatkan sesuatu dipanggil pertanyaan tersebut, bahan yang keluar selepas tanda tanya, seperti yang kita lihat dengan contoh Google kami di lulus dalam parameter HD. Kami kemudian menyatukan bersama akar pelayan web dengan jalan yang ada di bahawa permintaan baris pertama dan membentuk laluan penuh fail yang kita mahu mencari. Selepas itu, kita akan memastikan bahawa fail wujud dan boleh dibaca. Dan kemudian kami akan mengeluarkan mereka sambungan fail, yang .html atau .php itu, atau beberapa tempoh lanjutan itu di sangat akhir untuk rentetan yang diminta. Sehingga seterusnya ialah keseluruhan sekumpulan kod kita menulis untuk benar-benar menjana PHP menjana kandungan untuk anda. Secara ringkasnya, ini kod mengambil nama fail yang anda mahu PHP untuk mentafsir. Kami menyampaikan ia dengan sesuatu yang dinamakan paip ke dalam jurubahasa PHP ini. Kembali sambutan yang seolah-olah sambutan adalah fail sendiri. Dan kemudian kita melelar lebih yang fail bait, menarik mereka semua ke dalam satu penampan supaya kita dapat akhirnya mencetak mereka keluar. Sesungguhnya, semua ini panggilan di sini untuk dprintf membolehkan kita untuk mencetak sesuatu dipanggil penghurai fail, yang hanya integer yang mewakili fail. Hampir sama di hadapan Allah, tetapi berbeza dari fail penunjuk bintang. Perhatikan bagaimana anda boleh menggunakan sintaks seperti printf sini supaya saya boleh dinamik memasukkan sesuatu seperti panjang untuk nilai sebuah header HTTP dipanggil Panjang Kandungan. Dan akhirnya saya menggunakan fungsi betul untuk benar-benar menulis badan untuk permintaan itu. Malangnya, kami hanya dilaksanakan sokongan untuk secara dinamik dijana PHP fail. Kami tidak melaksanakan sokongan untuk fail statik seperti gifs, dan JPEG, dan CSS dan HTML fail. Bahawa, malangnya, yang tinggal untuk anda untuk bertindak balas untuk tujuan pelanggan ini lakukan. Jadi di sana anda akan mendapati bahawa terdapat tidak banyak inspirasi dalam blok itu, tetapi jika anda sedikit lebih tinggi pada bagaimana kami pergi tentang mentafsirkan kod PHP, fungsi yang anda akan menggunakan adalah sedikit berbeza. Malah, anda boleh meminjam beberapa fungsi mungkin daripada forensik set masalah, kerana pada akhir hari itu semua yang anda perlu lakukan di sini adalah apabila anda tahu apa yang fail terbuka dan sebaik sahaja anda tahu ia apa yang dipanggil Jenis MIME atau jenis kandungan, anda perlu membaca dalam mereka bytes dan entah bagaimana meludah mereka keluar. Dan sekarang lawatan ini fungsi lain fail. Sehingga pertama disambungkan, yang hanya mengembalikan benar apabila ia akhirnya mendengar yang sambungan daripada pengguna. Sehingga seterusnya ialah kesilapan. Ralat Sementara itu, sebagai fungsi kita menulis untuk mengendalikan semua berbeza 400 dan status HTTP 500 kod yang anda mungkin mahu untuk menghantar kembali kepada pengguna, bersama-sama dengan mesej standard. Sehingga seterusnya ialah beban, yang terutama fungsi penuh daging, yang tujuan dalam kehidupan adalah untuk membaca dari fail bintang penunjuk kandungan fail ke dalam buffer global bahawa kita diisytiharkan di seluruh dunia atas [? utama. ?] Ini adalah agak rumit kerana kita perlu membaca bait dari fail tetapi memeriksa setiap lelaran sama ada kita telah pun melanda akhir fail atau sesuatu yang lain telah berlaku. Dan kita menggunakan realloc memastikan bahawa apa penampan kita menggunakan berkembang dan yang semakin meningkat dan berkembang dan sentiasa mendahului bilangan bait bahawa kita perlu menyesuaikan diri di sana. Pengendali, sementara itu, adalah fungsi yang mendapat dipanggil dengan cara yang mempunyai berdaftar Kawalan C sebagai isyarat yang kita mahu untuk memintas. Perhatikan di sini dalam pengendali bahawa ia akhirnya panggilan berhenti, yang sudah tentu berhenti pelayan web. Dan malangnya, lookup tidak dilaksanakan. Di hadapan Allah, ini adalah fungsi yang agak mudah. Memandangkan sambungan fail, ia memerlukan untuk kembali ia dipanggil MIME jenis atau jenis kandungan. Dan kita nyatakan dalam penentuan itu apa pemetaan yang mesti. Tetapi anda perlu untuk menterjemahkan ia akhirnya c kod. Sehingga seterusnya ialah fungsi juga penuh daging kami dipanggil hurai, tujuan yang dalam kehidupan adalah untuk membaca, bukan dari fail, tetapi dari sambungan rangkaian. Secara khusus, membaca dan menghuraikan yang Permintaan HTTP yang yang datang dari pelayar kepada pelayan supaya akhirnya kita dapat menghuraikan pada hanya pengepala dalam permintaan itu talian dan kembali mereka kepada anda melalui penampan global yang kita diisytiharkan di atas [? utama. ?] Tetap semula, sementara itu, adalah fungsi yang kita menentukan yang mendapat dipanggil secara berulang dalam daripada utama setiap kali anda mengenai bersedia untuk mula mendengar untuk sambungan baru supaya kita sentiasa tahu keadaan pembolehubah kami dan supaya kita kena juga membebaskan apa-apa memori yang mungkin telah diperuntukkan untuk sambungan rangkaian sebelumnya. Sehingga seterusnya ialah bermula, fungsi yang kita menulis yang mengandungi keseluruhannya banyak kod rangkaian yang akhirnya bermula pelayan web. Sehingga lepas adalah fungsi dipanggil stop, yang tidak tepat itu, ia berhenti pelayan web. Tetapi pertama ia membebaskan apa-apa memori yang masih telah diperuntukkan. Tetapi ia akhirnya panggilan keluar tanpa kembali kawalan kepada fungsi utama kami. Akhirnya, salah satu daripada teknik yang paling penting apabila melaksanakan pelayan web ini adalah akan menjadi sedikit percubaan dan kesilapan, mempunyai satu pelayar tetingkap terbuka di sebelah kanan dan tetingkap terminal di kiri, konsol pelayan tetingkap, supaya anda boleh melihat mesej yang dipaparkan pada skrin. Tetapi lebih baik lagi akan menjadi satu pertiga tetingkap, tetingkap terminal kedua, di mana anda menggunakan Telnet, penggunaan bagi yang ditetapkan dalam spec. Dan Telnet hanya sangat program rangkaian mudah yang membolehkan anda untuk berpura-pura menjadi pelayar dalam satu tetingkap ketika bercakap kepada tetingkap yang lain. Dengan cara ini anda boleh melihat betul-betul perintah teks yang akan datang kembali dari pelayan untuk pelanggan tanpa perlu poking sekitar pemaju krom ini alat dalam cara lain antara muka clunkier.