php یک مفسر داره نه یک کامپایلر
به همین دلیل نیاز داره هر بار تفسیر بشه
nanoweb در مقابل Denial-of-service attack مستحکم هست (apache در مقابل این حملات نسبت به nanoweb ضعیف عمل می کنه دلیلش هم معلوم هست حملات بر روی php تاثیر میزاره نه apache و php هست که لود رو بالا می بره به همین دلیل تصمیمگیری رو کند انجام میده و بعد down میشه اما در nanoweb به دلیل اینکه این درخواستها زیاد باشه روی خود php تاثیر میزاره اول از همه خودش down میشه. در ضمن می تونه ip ها رو بلاک کنه شما که nanoweb رو خوندید اینجاهاش رو هم می خوندید
اما یه مشکلی هست و اون اینه که شما هر دفعه که نمیخواهید برای اجرای این برنامه در command هی اینتر بزنید.
nanoweb بیشتر برای لینوکس طراحی شده. در اونجا هم فقط کافی هست که در demon قرار بدی (اگر اینطور بود که برای apache هم هر بار باید وارد commandline شد و apache رو استارت کرد).
در این nanoweb کذایی هم همین کار رو کرده و اومده یه برنامه مقیم در حافظه که exe است و ربطی به php نداره رو نوشته که این واسط بین کد Php و php.exe میشه،
که apache هم مثل اون exe مقیم در حافظه عمل میکنه اما بی واسطه.
شما که می دونید php نیاز به مفسر داره چرا این رو میگید. برای اجرا باید تفسیر بشه. اگر اینطور هست بگید pyhon هم کذایی هست چون میشه تفسیر بشه و وبسرورهایی که باهاش نوشته شده به درد لای جرز می خوره.
ز اونجایی که php یک اسکریپت است و زبان برنامه نویسی نیست نمیتوان با آن برنامه های مقیم در حافظه نوشت چون اسکریپت ها برای اینکار نوشته نشده اند؛
همونطور که می دونید php هم می تونه دقیقا به حافظه دسترسی داشته باشه و تا وقتی که در حال اجرا هست می تونه در حافظه باشه اگر اینطور نبود که nanoweb باید بعد از ۵۰۰ درخواست از بین می رفت. اما با یک ab می تونید این رو بفهمید که رم رو به اون صورت نمی گیره و هنوز در حال اجرا می مونه.
پس می بینید که این وب سرور کذایی نهایتا به یک exe ختم میشه که هیچ ربطی به اسکریپتهای php نداره.
این exe که شما گفتید همون مفسر هست. اگر اینطور باشه c هم بدون gcc به درد نمی خوره یا python هم بدون مفسرش به درد نمی خوره.
اینجا هم باید یک برنامه سیستمی باشد تا بتواند به منابع سیستم دسترسی داشته و آنها را هم کنترل کند ...
php می تونه به منابع سیستمی دسترسی داشته باشه خودتون یک مقدار جستجو کنید.
یادمون نره که apache به خاطر چیزهای دیگه هم هست که قدرتمند هست. یک عالمه ماژول و هزار و یک چیز اضافه داره. که البته همین ها باعث میشه سرعتش هم پایین تر بیاد.
این هم یک ab از هر دو سرور برای اجرا کردن یک درخواست به php و یک درخواست به html
برای apache درخواست به فایل index.php
ab -n 1000 -c 10
http://local.com/index.php
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd,
zeustech.net
Copyright 2006 The Apache Software Foundation,
Welcome! - The Apache Software Foundation
Completed 200 requestsbehesht.com (be patient)
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software: Apache/2.2.4
Server Hostname: local.com
Server Port: 80
Document Path: /index.php
Document Length: 43680 bytes
Concurrency Level: 10
Time taken for tests: 60.436763 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 44013000 bytes
HTML transferred: 43680000 bytes
Requests per second: 16.55 [#/sec] (mean)
Time per request: 604.368 [ms] (mean)
Time per request: 60.437 [ms] (mean, across all concurrent requests)
Transfer rate: 711.17 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 7.1 0 101
Processing: 89 601 534.4 615 15474
Waiting: 88 600 534.4 614 15473
Total: 89 602 534.9 615 15474
Percentage of the requests served within a certain time (ms)
50% 615
66% 729
75% 773
80% 801
90% 876
95% 948
98% 1051
99% 1345
100% 15474 (longest request)
vahid@vahid-desktop:~$
رم از 506 مگابایت به 707 مگابایت افزایش یافت
برای nanoweb درخواست به فایل index.php
ab -n 1000 -c 10 http://local.com/index.php
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Completed 200 requestsbehesht.com (be patient)
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software: nanoweb
Server Hostname: local.com
Server Port: 80
Document Path: /index.php
Document Length: 43680 bytes
Concurrency Level: 10
Time taken for tests: 54.569856 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 44013000 bytes
HTML transferred: 43680000 bytes
Requests per second: 15.16 [#/sec] (mean)
Time per request: 555.486 [ms] (mean)
Time per request: 43.158 [ms] (mean, across all concurrent requests)
Transfer rate: 611.12 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 7.1 0 101
Processing: 55 553 502.4 601 14125
Waiting: 57 550 503.4 602 14126
Total: 58 561 504.9 603 14568
Percentage of the requests served within a certain time (ms)
50% 507
66% 658
75% 698
80% 708
90% 757
95% 801
98% 971
99% 1034
100% 9845 (longest request)
vahid@vahid-desktop:~$
افزایش رم از 404 مگابایت 641 مگابایت
درخوااست apache به فایل login.html
ab -n 1000 -c 10 http://local.com/extm/login.html
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking local.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software: Apache/2.2.4
Server Hostname: local.com
Server Port: 80
Document Path: /extm/login.html
Document Length: 929 bytes
Concurrency Level: 10
Time taken for tests: 0.212419 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 1207393 bytes
HTML transferred: 935503 bytes
Requests per second: 4707.68 [#/sec] (mean)
Time per request: 2.124 [ms] (mean)
Time per request: 0.212 [ms] (mean, across all concurrent requests)
Transfer rate: 5550.35 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.6 0 4
Processing: 0 1 0.7 1 5
Waiting: 0 0 0.6 0 5
Total: 1 1 0.8 1 5
Percentage of the requests served within a certain time (ms)
50% 1
66% 2
75% 2
80% 2
90% 2
95% 2
98% 2
99% 5
100% 5 (longest request)
vahid@vahid-desktop:~$
برای nanoweb برای درخواست به فایل login.html
ab -n 1000 -c 10 http://local.com/extm/login.html
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking local.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software: nanoweb
Server Hostname: local.com
Server Port: 80
Document Path: /extm/login.html
Document Length: 929 bytes
Concurrency Level: 10
Time taken for tests: 0.13589 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 1207393 bytes
HTML transferred: 935503 bytes
Requests per second: 4988.68 [#/sec] (mean)
Time per request: 2.234 [ms] (mean)
Time per request: 0.219 [ms] (mean, across all concurrent requests)
Transfer rate: 5550.35 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.6 0 4
Processing: 0 1 0.7 1 5
Waiting: 0 0 0.6 0 5
Total: 1 1 0.8 1 5
Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 2
80% 2
90% 2
95% 3
98% 3
99% 4
100% 4 (longest request)
vahid@vahid-desktop:~$
بیچاره nanoweb کذایی فقط به خاطر اینکه از اول php برای web نوشته شده بود و در ذهن همه این گنجانده شده همه نقاط مثبتش رو باید نادیده گرفت.
حتی توی تست هم در مقابل apache در درخواستهای php جلو افتاده و در بقیه درخواستها تقریبا پا به پاش میاد. اما اینها فدای اینکه php یک زبان اسکریپتی هست و نمیشه باهاش از این قبیل کارها رو کرد.
بهتر هست که ما هم دچار شهرت زدگی نشیم و هر چیز رو اول تست کنیم بعد قبول کنیم. چیزی که دانش میگه تا وقتی که توی عمل ثابت نشه ارزش نداره.
خودتون هم می تونید یک تست کنید.