คำนำ
Workerman, PHP แอพพลิเคชั่นคอนเทนเนอร์ประสิทธิภาพสูง
Workerman คืออะไร?
Workerman คือ คอนเทนเนอร์ PHP แบบประสิทธิภาพสูงที่พัฒนาโดย PHP ที่เป็นโอเพนซอร์ส
Workerman ไม่ใช่การสร้างขึ้นใหม่ มันไม่ใช่เฟรมเวิร์ก MVC แต่เป็นเฟรมเวิร์กบริการที่มีพื้นฐานและทั่วไปมากกว่า คุณสามารถใช้มันในการพัฒนา tcp proxy, proxy แบบ ladder, สร้างเกมเซิร์ฟเวอร์, อีเมลเซิร์ฟเวอร์, ftp เซิร์ฟเวอร์ หรือแม้กระทั่งพัฒนา redis ในรูปแบบ PHP, ฐานข้อมูลในรูปแบบ PHP, nginx ในรูปแบบ PHP, php-fpm ในรูปแบบ PHP เป็นต้น Workerman สามารถกล่าวได้ว่าเป็นนวัตกรรมในวงการ PHP ที่ทำให้ผู้พัฒนาหลุดพ้นจากข้อจำกัดว่าภาษานี้ใช้เฉพาะเพื่อเว็บเท่านั้น
จริง ๆ แล้ว Workerman คล้ายกับ nginx เวอร์ชัน PHP โดยมีแกนหลักเป็นหลายกระบวนการ + Epoll + Non-blocking IO. Workerman แต่ละโปรเซสสามารถรักษาการเชื่อมต่อพร้อมกันได้หลายพันการเชื่อมต่อ เนื่องจากมันทำงานในหน่วยความจำและไม่พึ่งพา Apache, nginx, php-fpm จึงมีประสิทธิภาพที่สูงมาก นอกจากนี้ยังรองรับ TCP, UDP, UNIX SOCKET, รองรับการเชื่อมต่อแบบยาว, รองรับ Websocket, HTTP, WSS, HTTPS และโปรโตคอลการสื่อสารที่กำหนดเองต่างๆ รวมไปถึงฟีเจอร์ต่างๆ เช่น ตัวตั้งเวลา, โปรแกรมคลาวด์ socket แบบอะซิงโครนัส, Redis แบบอะซิงโครนัส, HTTP แบบอะซิงโครนัส, คิวข้อความแบบอะซิงโครนัส และอื่น ๆ อีกมากมายรวมถึงส่วนประกอบประสิทธิภาพสูงหลายรายการ
ทิศทางการใช้งาน Workerman
Workerman แตกต่างจากเฟรมเวิร์ก MVC แบบดั้งเดิม Workerman ไม่เพียงแค่ใช้ในการพัฒนาเว็บ แต่ยังมีพื้นที่การใช้งานที่กว้างขวางมากกว่า เช่น การสื่อสารทันที, Internet of Things (IoT), เกม, การจัดการบริการ, เซิร์ฟเวอร์หรือ Middleware อื่น ๆ ซึ่งแน่นอนว่าทำให้ผู้พัฒนา PHP มีวิสัยทัศน์กว้างขวางมากขึ้น ตอนนี้ผู้พัฒนา PHP ในพื้นที่เหล่านี้มีจำนวนจำกัด หากต้องการมีข้อได้เปรียบด้านเทคนิคในวงการ PHP ไม่พอใจกับงาน CRUD ประจำวัน หรืออยากพัฒนาไปทางสถาปนิกหรือผู้เชี่ยวชาญด้านเทคนิค Workerman เป็นเฟรมเวิร์กที่ควรค่าแก่การเรียนรู้มาก ๆ แนะนำให้ผู้พัฒนาไม่เพียงแค่ใช้ แต่ยังสามารถพัฒนาโปรเจกต์โอเพนซอร์สของตนเองบนพื้นฐานของ Workerman เพื่อเพิ่มทักษะและขยายอิทธิพลของตัวเอง เช่นโครงการ Beanbun เฟรมเวิร์กเว็บครอว์เลอร์หลายโปรเซส เป็นตัวอย่างที่ดีมาก เพิ่งเปิดตัวได้ไม่นานก็ได้รับการตอบรับอย่างดีมากมาย
ทิศทางการใช้งาน Workerman มีดังนี้:
-
การสื่อสารทันที
เช่น การแชททันทีบนเว็บ, การส่งข้อความทันที, mini program ของ WeChat, การแจ้งเตือนข้อความในแอพมือถือ, การแจ้งเตือนข้อความในซอฟต์แวร์ PC เป็นต้น
[ตัวอย่าง workerman-chat ห้องแชท, การส่งข้อความเว็บ, ห้องแชท tadpole] -
Internet of Things (IoT)
เช่น การสื่อสารกับเครื่องพิมพ์, การสื่อสารกับไมโครคอนโทรลเลอร์, สายรัดข้อมืออัจฉริยะ, บ้านอัจฉริยะ, รถจักรยานยนต์แชร์ เป็นต้น
[กรณีศึกษาจากลูกค้า เช่น 易联云, 易泊时代 เป็นต้น] -
เซิร์ฟเวอร์เกม
เช่น เกมกระดาน, MMORPG เป็นต้น
[ตัวอย่าง browserquest-php] -
บริการ HTTP
เช่น การเขียน HTTP interface ประสิทธิภาพสูง, เว็บไซต์ประสิทธิภาพสูง หากสนใจทำบริการหรือไซต์ที่เกี่ยวข้องกับ HTTP แนะนำ webman อย่างยิ่ง -
บริการ SOA
ใช้ Workerman ในการบรรจุหน่วยฟังก์ชันต่างๆ ของธุรกิจที่มีอยู่เพื่อให้บริการในรูปแบบที่มี API ที่เป็นหนึ่งเดียวที่จะส่งออก ทำให้ระบบมีการเชื่อมต่อที่หลวม, ง่ายในการบำรุงรักษา, มีความพร้อมในการใช้งานสูงและง่ายต่อการขยาย
[ตัวอย่าง workerman-json-rpc, workerman-thrift] -
เซิร์ฟเวอร์ซอฟต์แวร์อื่น ๆ
เช่น GatewayWorker, PHPSocket.IO, http proxy, sock5 proxy, องค์ประกอบการสื่อสารแบบกระจาย, องค์ประกอบการแชร์ตัวแปรแบบกระจาย, คิวข้อความ, DNS เซิร์ฟเวอร์, WebServer, CDN เซิร์ฟเวอร์, FTP เซิร์ฟเวอร์ เป็นต้น -
องค์ประกอบ
เช่น redis แบบอะซิงโครนัส, HTTP client แบบอะซิงโครนัส, mqtt client IoT, คิวข้อความ workerman/redis-queue, workerman/stomp, workerman/rabbitmq, องค์ประกอบการตรวจสอบไฟล์ และองค์ประกอบอื่น ๆ ที่พัฒนาขึ้นโดยบุคคลที่สาม
ชัดเจนว่าเฟรมเวิร์ก mvc ดั้งเดิมทำได้ยากมากในการทำฟังก์ชั่นดังกล่าว จึงเป็นเหตุผลที่ Workerman เกิดขึ้น
แนวคิดของ Workerman
เรียบง่าย, เสถียรภาพ, ประสิทธิภาพสูง, กระจาย
เรียบง่าย
ความเรียบง่ายคือความสวยงาม, Workerman มีแกนที่เรียบง่าย โดยมีเพียงไม่กี่ไฟล์ PHP และเปิดเผยเพียงไม่กี่ API การเรียนรู้จึงง่ายมาก ฟังก์ชันอื่น ๆ ทั้งหมดสามารถขยายได้ทางผ่านส่วนประกอบ
Workerman มีเอกสารที่สมบูรณ์ + โฮมเพจที่มีชื่อเสียง + ชุมชนที่กระตือรือร้น + QQ กลุ่มนับพัน + ส่วนประกอบที่มีประสิทธิภาพสูงมากมาย + ตัวอย่างมากมาย ทั้งหมดนี้ทำให้ผู้พัฒนาสามารถใช้งานได้อย่างคล่องแคล่วมากขึ้น
เสถียรภาพ
Workerman ได้เปิดแหล่งที่มาหลายปีและถูกใช้โดยบริษัทจดทะเบียนจำนวนมากอย่างกว้างขวาง มีความเสถียรภาพสูง บางบริการไม่ได้รีสตาร์ทนานกว่า 2 ปีแต่ยังทำงานได้รวดเร็ว ไม่มีการหยุดทำงาน, ไม่มีการรั่วไหลของหน่วยความจำ, ไม่มีบั๊ก
ประสิทธิภาพสูง
เนื่องจาก Workerman ทำงานอยู่ในหน่วยความจำเองและไม่พึ่งพา Apache/nginx/php-fpm ไม่มีค่าใช้จ่ายในการสื่อสารระหว่างคอนเทนเนอร์ไปยัง PHP, ไม่มีค่าใช้จ่ายในการเริ่มต้นและทำลายทุกการร้องขอ จึงมีประสิทธิภาพสูงมาก เทียบกับเฟรมเวิร์ก MVC แบบดั้งเดิมแล้ว ประสิทธิภาพสูงกว่าหลายสิบเท่า และในการทดสอบแรงกด QPS โดยใช้ ab บน PHP7 ยิ่งสูงกว่า nginx เพียงอย่างเดียว
กระจาย
ตอนนี้ไม่ใช่ยุคที่ต้องพึ่งพาตนเองอีกต่อไป แม้ว่าเซิร์ฟเวอร์จะมีประสิทธิภาพสูงแค่ไหนก็ตาม ยังคงมีขีดจำกัด การใช้งานเซิร์ฟเวอร์หลายๆ เครื่องเพื่อการกระจายตัวคือคำตอบ Workerman จัดหาชุดโซลูชั่นการสื่อสารแบบกระจายด้วยการเชื่อมต่อรูปแบบยาว GatewayWorker framework เพียงแค่มีการตั้งค่าที่เรียบง่ายแล้วเริ่มทำงานได้โดยไม่ต้องเปลี่ยนแปลงโค้ดธุรกิจ ความสามารถในการรองรับของระบบจะเพิ่มขึ้นเป็นทวีคูณ หากคุณกำลังพัฒนาแอพพลิเคชั่น TCP แบบเชื่อมต่อยาว แนะนำให้ใช้ GatewayWorkerโดยเฉพาะ เพราะมันเป็นการทำงานที่บรรจุ Workerman เข้าไปเพื่อให้มี API ที่มีประสิทธิภาพมากขึ้นสำหรับการพัฒนาติดต่อยาวและการจัดการที่มีความสามารถในการกระจายสูง
ขอบเขตการใช้งานคู่มือ
Workerman รุ่น 3.x - 5.x
ผู้ใช้ Windows (必读)
workerman รองรับทั้งระบบปฏิบัติการ linux และ windows. เวอร์ชัน Windows ของ Workerman ไม่ขึ้นกับส่วนขยายใด ๆ เพียงแค่ต้องตั้งค่าสภาพแวดล้อมของ PHP ให้ถูกต้อง ในเวอร์ชัน Windows ของ Workerman การติดตั้งและข้อควรระวังโปรดดูที่ คู่มือผู้ใช้ Windows
ไคลเอนต์
โปรโตคอลการสื่อสารของ Workerman เปิดกว้างและปรับแต่งได้ ซึ่งในทางทฤษฎี Workerman สามารถสื่อสารกับไคลเอนต์จากแพลตฟอร์มใดๆ ที่ใช้โปรโตคอลใด ๆ ได้ เมื่อผู้ใช้พัฒนาไคลเอนต์สามารถทำการสื่อสารกับเซิร์ฟเวอร์ได้ตามโปรโตคอลการสื่อสารที่กำหนด