Dengan perkembangan pesat Internet dan pertumbuhan volum data yang berterusan, untuk memastikan prestasi tinggi dan kebolehskalaan aplikasi, pembangun telah mula menggunakan secara meluas rangka kerja pengaturcaraan tak segerak. Sejak dilancarkan, Swoole telah menjadi perintis dalam pengaturcaraan tak segerak PHP dan telah digemari oleh semakin ramai pembangun. Swoole menyediakan sokongan coroutine penuh, yang boleh meningkatkan keupayaan pemprosesan permintaan serentak aplikasi. Dalam sesetengah senario aplikasi, coroutine yang berbeza perlu berkongsi sambungan pangkalan data yang sama Dalam kes ini, teknologi perkongsian coroutine Swoole perlu digunakan.
Intipati teknologi perkongsian coroutine Swoole adalah untuk memperuntukkan sambungan pangkalan data dalam kumpulan sambungan kepada coroutine untuk digunakan Selepas coroutine digunakan, sambungan dikembalikan ke kumpulan sambungan. Kelebihan ini ialah ia mengelakkan setiap coroutine perlu menyambung ke pangkalan data, dengan itu mengurangkan overhed sambungan dan meningkatkan prestasi aplikasi. Dalam persekitaran berbilang coroutine, perkongsian sambungan pangkalan data dalam kumpulan sambungan yang sama juga boleh mengelak daripada dihadkan oleh bilangan sambungan.
Mari kita lihat cara Swoole melaksanakan coroutine untuk berkongsi sambungan pangkalan data yang sama.
Langkah 1: Pasang sambungan Swoole
Tapak web rasmi Swoole menyediakan tutorial pemasangan Ia hanya mengambil beberapa langkah mudah untuk menyelesaikan pemasangan. Selepas pemasangan selesai, anda perlu menambah konfigurasi sambungan swoole dalam fail php.ini:
extension=swoole.so
Langkah 2: Buat kolam sambungan
Dalam Swoole, kolam sambungan adalah konsep yang sangat penting, dan fungsinya adalah untuk meningkatkan sambungan pangkalan data Kebolehgunaan semula. Kumpulan sambungan akan mengekalkan kegigihan sambungan untuk mengelakkan sambungan kerap ke pangkalan data dan memastikan kecekapan aplikasi. Kita boleh menggunakan kelas kumpulan sambungan Swoole SwooleCoroutineMySQLPool
untuk mencipta objek kumpulan sambungan. SwooleCoroutineMySQLPool
来创建一个连接池对象。
<?php $dbconfig = [ 'host' => '127.0.0.1', 'port' => 3306, 'user' => 'root', 'password' => '', 'database' => 'test_db', 'charset' => 'utf8mb4', 'timeout' => 30, 'strict_type' => true, 'fetch_mode' => true, 'max_idle_time' => 3, 'max_object_num' => 20, ]; $pool = new SwooleCoroutineMySQLPool($dbconfig);
连接池配置项说明:
第三步:获取连接对象
创建连接池后,需要在每个协程中获取数据库连接对象。在Swoole中,可以通过 SwooleCoroutineMySQLPool->get()
方法获取数据库连接对象。
<?php go(function () use ($pool) { // 获取连接对象 $conn = $pool->get(); // 查询操作 $result = $conn->query('SELECT * FROM users'); // 归还连接 $pool->put($conn); });
注意:每个协程都要通过连接池获取连接对象,避免多个协程同时操作同一个连接对象。
第四步:关闭连接
协程使用完连接对象后,应该将其归还给连接池。在Swoole中,可以通过 SwooleCoroutineMySQLPool->put()
将连接归还给连接池。
<?php go(function () use ($pool) { $conn = $pool->get(); $result = $conn->query('SELECT * FROM users'); $pool->put($conn); });
第五步:实现协程共享同一连接池
在实际的应用场景中,通常需要实现协程共享同一连接池的需求。这时候,我们可以通过依赖注入的方式来实现。
<?php // 创建连接池 $dbconfig = [ 'host' => '127.0.0.1', 'port' => 3306, 'user' => 'root', 'password' => '', 'database' => 'test_db', 'charset' => 'utf8mb4', 'timeout' => 30, 'strict_type' => true, 'fetch_mode' => true, 'max_idle_time' => 3, 'max_object_num' => 20, ]; $pool = new SwooleCoroutineMySQLPool($dbconfig); // 注册依赖库 $container = new Container(); $container->singleton(Pool::class, function () use ($pool) { return $pool; });
在代码中注册了连接池实例到容器中,并使用 singleton()
方法将其设为单例对象,确保多个协程共享同一连接池的实例。
下面演示如何在协程中使用连接池:
<?php // 协程1 go(function () use ($container) { $pool = $container->make(Pool::class); $conn = $pool->get(); $result = $conn->query('SELECT * FROM users'); $pool->put($conn); }); // 协程2 go(function () use ($container) { $pool = $container->make(Pool::class); $conn = $pool->get(); $result = $conn->query('SELECT * FROM users'); $pool->put($conn); });
通过 make()
rrreee
SwooleCoroutineMySQLPool->get()
. 🎜rrreee🎜Nota: Setiap coroutine mesti mendapatkan objek sambungan melalui kumpulan sambungan untuk mengelakkan berbilang coroutine mengendalikan objek sambungan yang sama pada masa yang sama. 🎜🎜Langkah 4: Tutup sambungan🎜🎜Selepas coroutine telah menggunakan objek sambungan, ia harus mengembalikannya ke kolam sambungan. Dalam Swoole, sambungan boleh dikembalikan ke kolam sambungan melalui SwooleCoroutineMySQLPool->put()
. 🎜rrreee🎜Langkah 5: Laksanakan coroutine yang berkongsi kumpulan sambungan yang sama🎜🎜Dalam senario aplikasi sebenar, biasanya diperlukan untuk melaksanakan keperluan untuk coroutine berkongsi kumpulan sambungan yang sama. Pada masa ini, kita boleh mencapainya melalui suntikan pergantungan. 🎜rrreee🎜Mendaftarkan contoh kumpulan sambungan ke bekas dalam kod dan menggunakan kaedah singleton()
untuk menetapkannya sebagai objek tunggal untuk memastikan berbilang coroutine berkongsi tika kumpulan sambungan yang sama. 🎜🎜Yang berikut menunjukkan cara menggunakan kumpulan sambungan dalam coroutine: 🎜rrreee🎜Melalui kaedah make()
, anda boleh mendapatkan contoh perpustakaan bergantung dalam coroutine, supaya berbilang coroutine boleh berkongsi sambungan pangkalan data yang sama. 🎜🎜Ringkasan🎜🎜Teknologi perkongsian coroutine Swoole boleh mengelakkan sambungan pangkalan data yang kerap dan meningkatkan prestasi dan kebolehskalaan aplikasi. Apabila menyedari bahawa coroutine berkongsi kumpulan sambungan yang sama, kami boleh mencapainya melalui suntikan pergantungan, untuk mencapai tujuan berbilang coroutine berkongsi sambungan pangkalan data yang sama. Lain kali anda perlu menggunakan teknologi coroutine Swoole semasa membangunkan aplikasi, anda juga boleh mencuba teknologi perkongsian coroutine untuk meningkatkan kecekapan aplikasi. 🎜Atas ialah kandungan terperinci Bagaimanakah semua coroutine Swoole berkongsi sambungan pangkalan data yang sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!