1.5 คู่มือการอัพเกรด
ก่อนการอัพเกรด กรุณาสำรองข้อมูล และใช้คำสั่งต่อไปนี้เพื่ออัพเกรด
composer require workerman/webman-framework ^1.5 -W && composer require webman/console ^1.2.12 && php webman install
คุณสมบัติและการเปลี่ยนแปลง
รองรับ workerman v5 co-routine
เกร้ดความ
workerman v5 ต้องการ PHP>=8.1
คำสั่งอัพเกรด workermancomposer require workerman/workerman ^5.0.0 -W
Fiber ต้องการติดตั้งcomposer require revolt/event-loop ^1.0.0
ตัวอย่าง
การตอบสนองช้า
<?php
namespace app\controller;
use support\Request;
use Workerman\Timer;
class TestController
{
public function index(Request $request)
{
// หลับ 1.5 วินาที
Timer::sleep(1.5);
return $request->getRemoteIp();
}
}
Timer::sleep()
คล้ายกับฟังก์ชัน sleep()
ของ PHP แต่ต่างกันที่ Timer::sleep()
ไม่ทำให้กระบวนการชะงัก
การส่งคำขอ HTTP
โปรดทราบ
ต้องติดตั้ง composer require workerman/http-client ^2.0.0
<?php
namespace app\controller;
use support\Request;
use Workerman\Http\Client;
class TestController
{
public function index(Request $request)
{
static $client;
$client = $client ?: new Client();
$response = $client->get('http://example.com'); // ส่งคำขออย่างเชิงซิงโครนัส
return $response->getBody()->getContents();
}
}
เช่นกัน $client->get()
คำขอไม่เป็นการชะงัก ซึ่งนี่สามารถนำมาใช้ในการจัดการคำขอ HTTP โดยไม่ต้องการการชะงักเพื่อเพิ่มประสิทธิภาพ
ดูข้อมูลเพิ่มเติมที่ workerman/http-client
เพิ่ม support\Context คลาส
คลาส support\Context ใช้สำหรับเก็บข้อมูลที่เกี่ยวข้องกับคำขอ โดยเมื่อคำขอเสร็จสิ้นแล้ว ข้อมูล Context ที่เกี่ยวข้องจะถูกลบโดยอัตโนมัติ กล่าวคืออายุการดำเนินการของข้อมูล Context จะตามอายุการดำเนินการของคำขอ
ช่วงของตัวแปรทั่วไป
สภาพแวดล้อมของโคโรจันป้องกันการเก็บข้อมูลสถานะที่เกี่ยวข้องกับคำขอไว้ในตัวแปรทั่วไปหรือตัวแปรสถิต เนื่องจากสิ่งนี้อาจทำให้ตัวแปรทั่วไปที่ยับยั้งมีผลเนื่องจากความเป็นสำหรับของตัวแปรทั่วไป
<?php
namespace app\controller;
use support\Request;
use Workerman\Timer;
class TestController
{
protected static $name = '';
public function index(Request $request)
{
static::$name = $request->get('name');
Timer::sleep(5);
return static::$name;
}
}
เมื่อตั้งจำนวนของกระบวนการเป็น 1 เมื่อเราทำคำขอสองอันอย่างต่อเนื่อง
http://127.0.0.1:8787/test?name=lilei
http://127.0.0.1:8787/test?name=hanmeimei
เราคาดหวังว่าผลลัพธ์ของคำขอสองชิ้นจะได้เป็น lilei
และ hanmeimei
ตามลำดับ แต่ในความเป็นจริงแล้วผลลัพธ์ที่ได้คือ hanmeimei
ทั้งสองคำขอ
สาเหตุที่ให้ผลลัพธ์เป็นเช่นนั้นเกิดข้ึ้นเพราะโครงง่ายท่งม้งราคาสถิต $name
ของคำขอสองได้เปลี่ยนม้งค่าของกระบวนการแล้ว เมื่อการแยกเลยของคำขอแรมชไปจะส่งผลในค่าของสถิต $name
ที่กลาดเป็น hanmeimei
เหตุฉันโครงง่ายภายในควรให้อินทร์ก้อมูลสถานะของคำขอ
<?php
namespace app\controller;
use support\Request;
use support\Context;
use Workerman\Timer;
class TestController
{
public function index(Request $request)
{
Context::set('name', $request->get('name'));
Timer::sleep(5);
return Context::get('name');
}
}
ตัวแปรสถิตภายในควรไม่ทำให้ม้งเกิดขึ้น
<?php
namespace app\controller;
use support\Request;
use support\Context;
use Workerman\Timer;
class TestController
{
public function index(Request $request)
{
$name = $request->get('name');
Timer::sleep(5);
return $name;
}
}
เนื่องจาก $name
เป็นตัวแปรภายใน ซึ่งโคโรจันไม่สามารถเข้าถึงตัวแปรภายในของอีกหม้องได้ ดังนั้นการใช้ตัวแปรภายในเป็นวิธีที่ปลอดภัยจากปัญหาของโครจัน
เกี่ยวกับโครจัน
การใช้โครจันไม่ได้เป็นการหาซองที่ลงสิ้น การนำเข้าโครจันเปร็นการให้ความสนใจในกรณีที่สถานการณ์ของตัวแปรทั่วไป/ตัวแปรสถิตแพร่อยู่ และควรใช้Contextเพื่อกำหนดช่วงของข้อมูล นอกจากนี้ การจัดการบั๊กในสภาวการณ์ของโครจันยากกว่าการเขียนโปรแกรมแบบที่พบการแบล็ก
การเขียนโปรแกรมแบบที่พบการแบล็กของ webmanยังสามารถทำไปได้ดีอยู่แล้ว จากผลของการทดสอบ อัพเดทล่าสุด ในไปปย์สามปี สามมมการทดสอบทางประปาตางๆโชคดีของ webmanทำการด็ยด้รับผลพิสูรวะเป็น1เท่ากว่าโฟร์มขวา chiและเอไค่หลูล(เพราะูอรสุรัสชิงซิวการ),แล้วมาหลังจาก chiเลiี่ยใหั้ juเมีย le์gu่(เพราะูอรสุรัสชิงซิวการ)
เมื่อฐานข้อมูลและ Redis อยู่ภายในเครือข่ายภายใน การทำงานขม้ยในรูปแบบของกระบวนการอาจสุนันเริ่มสูงกว่าในกรณีภาพแวดล้อมของโครจัน เนื่องจากความเร็วของฐานข้อมูลและ Redis ที่เป็นอย่างเพี้ยน ความช่างง่ายส่งผลทiื่ในโคходผลของงโครจันที่นอองมีค่าเสิ่คนวื่นลต่ดใกายงวลีของกระบวนการอาจที่มย่างช้ำย,:);
ตา้งนันการที่ใช้โครจันอาจยไม่สามารถเพิ่มประสิทธิภาพได้อย่างล่า.SizeF้ใด
ช่วยเหลือเพิ่มเติมในการใช้ครจัน
เมื่อคุณควรถูรับข้อมูลจารการงเ้ใดชสาใบกขอที่ง้า้ายา้ยารรางบลงิ-=งัดยง็้ออางแดดเหำหแุ้ฉผูคแผแจเ
อ้ทไป้อแรทงแใตจุดแวดสสแ Morm.https://www.techempower.com/benchmarks/#section=data-r21&l=zij乱 -6bj&test=db&f=1ekg-cbcw-2t4w-27wr68-pc0-iv9slc-0-1ekgw-39g-kxs00-o0zk-4fu13d-2)
ใะจรตารายิะ่างงงงาีัเากกา้เบ่ทเเีิแ็้่้รุณ่าัtsdfี่ำยทืดีุ่ิ่เพ่้ทเทบัยเย็ดย์ตู่้้leีeุสุี่าท้ท้็่แมี่ะสูุะใ0ำ0่้งสak
็จกบบาปทบายัย้้ยาี้คย่้้็ขำยีใืเบอือใยีู็้้่เงู่อ_esๆี่้ืูล็วมุสุนทดดำt่า่ว้แบบำ่าอทการขุียจjoi```