Perbezaan antara nodejs dan swoole: 1. swoole menyediakan coroutine, manakala nodejs tidak menyediakan coroutine 2. Secara lalai, Swoole menjana berbilang thread pekerja pada setiap pelayan, manakala nodejs boleh menjana berbilang thread pekerja pada setiap pelayan; . Berbilang pekerja disokong tetapi memerlukan kebergantungan tambahan.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Swoole 4, komputer DELL G3
Apakah itu Swoole?
Swoole ialah rangka kerja pengaturcaraan PHP tak segerak berdasarkan coroutine.
Ia dibangunkan terutamanya oleh pembangun China yang mengusahakan aplikasi berskala besar yang menyasarkan pasaran China. Oleh itu, ia telah diuji tekanan dan disahkan dalam persekitaran pengeluaran trafik tinggi. Ini adalah teknologi yang anda boleh bergantung sepenuhnya dan ia menarik untuk digunakan!
Manfaat Siklon
Swoole mempunyai banyak faedah, termasuk berbilang pekerja web dan pekerja tugas yang berasingan, sokongan coroutine dan keupayaan untuk meningkatkan had permintaan dengan ketara.
Faedah Swoole:
Sokong berbilang Pekerja Web
Sokong pekerja tugas yang berasingan
Sokongan Coroutine
Tiada pelayan web diperlukan
Boleh meningkatkan had permintaan
Berbilang pekerja web dan pekerja tugas berasingan
Seperti yang dinyatakan di atas, Swoole mempunyai berbilang pekerja web dan pekerja tugas yang berasingan, membenarkan kod ditangguhkan. Menangguhkan proses yang berjalan lama membuka pintu kepada banyak kaedah yang sebelum ini tidak boleh dicapai dalam API dan aplikasi anda, seperti menangguhkan pemprosesan sehingga selepas respons dihantar.
Sokongan Coroutine
Sokongan Coroutine Swoole bermakna walaupun anda melakukan banyak I/O yang mahal (cth. bercakap dengan pangkalan data, menggunakan sistem fail, mengeluarkan Permintaan HTTP), anda juga boleh mengendalikan banyak permintaan.
Bootstrap hanya dimuatkan sekali, jadi anda tidak membayar cukai 15% hingga 25% untuk setiap permintaan. Kerana ini adalah sebahagian daripada permulaan, ini bermakna anda menggunakan lebih sedikit sumber pada setiap permintaan, termasuk RAM dan CPU. Untuk sesetengah aplikasi ini mungkin bermakna anda memerlukan lebih sedikit pelayan, yang mungkin disebabkan oleh masa jalan tak segerak.
Tiada pelayan web tambahan diperlukan
Bercakap tentang lebih sedikit pelayan, anda tidak memerlukan pelayan web kerana Swoole ialah pelayan web. Anda boleh memulakan bekas Docker yang hanya memasang PHP dan tidak memerlukan NGINX dipasang di hadapannya.
Anda tidak perlu menulis NGINX atau Apache dalam bekas yang sama, ia hanya boleh menjadi PHP. Dan jika anda akan melakukan apa-apa jenis kontena, memiliki bekas proses tunggal ini semuanya dalam satu bahasa adalah standard emas.
Siling Keperluan Lebih Tinggi
Menariknya, ahli Rangka Kerja Zend dan komuniti Laminas percaya bahawa pelayan async mampu mengendalikan empat permintaan yang boleh dicapai oleh persediaan standard tujuh kali.
Pasti, anda boleh menala Apache dan NGINX menjadi sangat pantas, tetapi anda boleh menjadi lebih pantas dengan pelayan tak segerak, dan Node telah membuktikannya berulang kali.
Kelemahan
Walaupun faedah yang disenaraikan di atas boleh membawa manfaat yang ketara kepada aplikasi PHP, Swoole masih mempunyai beberapa kelemahan yang jelas.
Kelemahan ini mungkin termasuk:
Pemasangan semula kod
Nyahpepijat
Seorang pendengar bagi setiap acara
Kaedah “end()” Respons Swoole
API permintaan/tindak balas bukan standard
Memuat Semula Kod
Sebagai pembangun PHP, kami biasa membuat perubahan pada kod kami dan kemudian memuatkan semula penyemak imbas untuk melihat kesan perubahan.
Malangnya, keupayaan untuk memuat semula kod tiada dalam Swoole. Itu kerana ia adalah proses yang panjang. Jadi apabila ia dimuat semula, ia menggunakan kod yang sama seperti sebelum perubahan.
Terdapat beberapa fungsi muat semula kod panas dalam Swoole, tetapi pada masa ini tiada cara untuk memuat semula apa-apa yang diperlukan untuk bootstrap contoh pelayan sebenar (fikirkan contoh aplikasi, bekas DI, konfigurasi) itu sendiri.
Nyahpepijat
Nyahpepijat boleh menjadi satu cabaran memandangkan sokongan coroutine Swoole tidak serasi dengan Xdebug dan Xhprof. Anda perlu membiasakan diri dengan pembalakan.
Kaedah "tamat" balas
Dalam Swoole, jika anda terlupa memanggil "$response->end()", sambungan akan kekal terbuka sehingga A network tamat masa berlaku. Ini bermakna bahawa proses semasa kekal terbuka, yang bermaksud gelung peristiwa tidak lagi wujud. Akhirnya ini akan menyebabkan tamat masa, dan tamat masa akan diperoleh, tetapi tamat masa masih menjadi isu.
Jadi jika anda boleh abstrak daripada itu, anda boleh mengelakkan sakit kepala. (Fungsi ini diperlukan supaya Swoole tahu apabila respons selesai dan boleh membebaskan pekerja untuk mengendalikan permintaan lain; namun, dari perspektif pengguna, ini adalah masalah kerana mudah terlupa untuk memanggilnya.)
Jadi ini adalah ciri yang sangat berguna dan mudah dalam masa jalan Swoole, tetapi adalah lebih baik jika anda boleh mengelak daripada melakukannya dalam kod anda sendiri.
API permintaan/tindak balas bukan standard
Kaedah "$response->end()" ialah contoh API permintaan/tindak balas bukan standard dalam Swoole. Ia tidak mengikut spesifikasi PSR-7 (antara muka pemesejan HTTP PHP) atau bahkan sebarang pelaksanaan rangka kerja seperti HTTPKernel atau laminas-http Symfony.
Jadi, jika anda menulis Swoole secara langsung tetapi masih mahu menggunakan rangka kerja anda sendiri, anda perlu menyesuaikan diri - tetapi ini boleh menjadi masalah.
Swoole lwn. NodeJS
Swoole menyediakan fungsi yang hampir sama dengan NodeJS. Ia mempunyai gelung acara, menyediakan HTTP tak segerak, rangkaian dan pelanggan soket, boleh mencipta pelayan web, senarai itu berterusan dan seterusnya. Tetapi apa bezanya?
Kerjasama
Mungkin perbezaan terbesar antara Swoole dan NodeJS ialah Swoole menyediakan coroutine. Selain itu, ia menyediakan sokongan coroutine untuk pelanggan terbina dalam seperti TCP dan UDP. Coroutine membenarkan pemprosesan tak segerak bagi dalaman bahasa sambil membenarkan kod ditulis seolah-olah pelaksanaan adalah segerak. Pengekodan tak segerak biasa memerlukan penghantaran panggilan balik yang akan dilaksanakan apabila proses tak segerak selesai, yang mungkin membawa kepada kod konvolusi untuk mengagregatkan hasil. Coroutines sangat memudahkan kerja dengan kod tak segerak dengan menjadikannya kelihatan sama seperti kod segerak biasa.
Memandangkan sokongan coroutine Swoole merangkumi kebanyakan operasi TCP/UDP, jika anda membuat panggilan rangkaian (contohnya, membuat panggilan HTTP ke pelayan lain), atau menggunakan operasi TCP untuk berkomunikasi dengan Redis, maka Boleh mendapat manfaat daripada sokongan coroutine.
Berbilang benang
Swoole juga berbeza daripada Nod kerana secara lalai, Swoole menghasilkan berbilang benang pekerja pada setiap pelayan dan menghasilkan benang yang sama seperti pelayan Bilangan benang pekerja adalah berkadar dengan bilangan teras yang ada. Oleh itu, secara lalai, ia berjalan pada prestasi optimum.
Mempunyai berbilang pekerja juga bermakna jika seorang pekerja terperangkap dalam proses yang panjang, mungkin ada pekerja lain yang tersedia untuk mengendalikannya. Setiap satu daripada ini mempunyai gelung peristiwa yang sepadan, yang bermaksud bahawa setiap acara boleh ditangguhkan atau dihasilkan sebagai coroutine, meningkatkan prestasi aplikasi.
Pekerja Tugas
Selain mempunyai berbilang pekerja pada setiap pelayan, Swoole juga boleh menjana Task Worker bebas daripada pekerja web.
Jika anda ingin menangguhkan beberapa operasi tanpa menyekat permintaan web padanya, dan mengetahui bahawa anda tidak perlu menunggu keputusannya, sebaliknya anda boleh menghasilkan tugasan yang akan dimasukkan ke dalam kumpulan pekerja tugas untuk anda untuk memproses begitu. Ini bermakna operasi yang benar-benar tidak menyekat pada kumpulan pekerja web anda!
Pembelajaran yang disyorkan: tutorial swole
Atas ialah kandungan terperinci Apakah perbezaan antara nodejs dan swole. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!