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
คำสั่งอัพเกรด workerman composer 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```