คำนำ

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 มีดังนี้:

  1. การสื่อสารทันที
    เช่น การแชททันทีบนเว็บ, การส่งข้อความทันที, mini program ของ WeChat, การแจ้งเตือนข้อความในแอพมือถือ, การแจ้งเตือนข้อความในซอฟต์แวร์ PC เป็นต้น
    [ตัวอย่าง workerman-chat ห้องแชท, การส่งข้อความเว็บ, ห้องแชท tadpole]

  2. Internet of Things (IoT)
    เช่น การสื่อสารกับเครื่องพิมพ์, การสื่อสารกับไมโครคอนโทรลเลอร์, สายรัดข้อมืออัจฉริยะ, บ้านอัจฉริยะ, รถจักรยานยนต์แชร์ เป็นต้น
    [กรณีศึกษาจากลูกค้า เช่น 易联云, 易泊时代 เป็นต้น]

  3. เซิร์ฟเวอร์เกม
    เช่น เกมกระดาน, MMORPG เป็นต้น
    [ตัวอย่าง browserquest-php]

  4. บริการ HTTP
    เช่น การเขียน HTTP interface ประสิทธิภาพสูง, เว็บไซต์ประสิทธิภาพสูง หากสนใจทำบริการหรือไซต์ที่เกี่ยวข้องกับ HTTP แนะนำ webman อย่างยิ่ง

  5. บริการ SOA
    ใช้ Workerman ในการบรรจุหน่วยฟังก์ชันต่างๆ ของธุรกิจที่มีอยู่เพื่อให้บริการในรูปแบบที่มี API ที่เป็นหนึ่งเดียวที่จะส่งออก ทำให้ระบบมีการเชื่อมต่อที่หลวม, ง่ายในการบำรุงรักษา, มีความพร้อมในการใช้งานสูงและง่ายต่อการขยาย
    [ตัวอย่าง workerman-json-rpc, workerman-thrift]

  6. เซิร์ฟเวอร์ซอฟต์แวร์อื่น ๆ
    เช่น GatewayWorker, PHPSocket.IO, http proxy, sock5 proxy, องค์ประกอบการสื่อสารแบบกระจาย, องค์ประกอบการแชร์ตัวแปรแบบกระจาย, คิวข้อความ, DNS เซิร์ฟเวอร์, WebServer, CDN เซิร์ฟเวอร์, FTP เซิร์ฟเวอร์ เป็นต้น

  7. องค์ประกอบ
    เช่น 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 สามารถสื่อสารกับไคลเอนต์จากแพลตฟอร์มใดๆ ที่ใช้โปรโตคอลใด ๆ ได้ เมื่อผู้ใช้พัฒนาไคลเอนต์สามารถทำการสื่อสารกับเซิร์ฟเวอร์ได้ตามโปรโตคอลการสื่อสารที่กำหนด