一个功能带来的高并发问题
有这样一个需求。用户想注册域名,但是呢,通常想的好的,都被人注册了。
这时候,程序自动的生成一定数量的域名,假设生成100个。然后在自动的查询
这100个域名是否被注册,从生成开始,域名就已经显示给了用户,然后
ajax来实时的更新每一个域名是否被注册的状态。
这时候,一个用户,就会带来100个并发查询,而且查域名状态,是需要连接whois服务器,有一个网络传输的过程
也就是这100个ajax查后台,就会带来100个php去发出whois的查询,等待结果,分析结果,返回给ajax调用
一般情况下,有几个用户同时一查。php的处理进程 就被占满了。整个站点的其他需要php实现都要处于等待状态了。。
这种情况下,要怎么优化呢?
我想的方案是:
1,将查询域名状态这事拿出去,放到另一个服务器上做。
2,查询域名状态不使用这种同步的方式,改用node.js这种异步模型的实现来做。
回复内容:
有这样一个需求。用户想注册域名,但是呢,通常想的好的,都被人注册了。
这时候,程序自动的生成一定数量的域名,假设生成100个。然后在自动的查询
这100个域名是否被注册,从生成开始,域名就已经显示给了用户,然后
ajax来实时的更新每一个域名是否被注册的状态。
这时候,一个用户,就会带来100个并发查询,而且查域名状态,是需要连接whois服务器,有一个网络传输的过程
也就是这100个ajax查后台,就会带来100个php去发出whois的查询,等待结果,分析结果,返回给ajax调用
一般情况下,有几个用户同时一查。php的处理进程 就被占满了。整个站点的其他需要php实现都要处于等待状态了。。
这种情况下,要怎么优化呢?
我想的方案是:
1,将查询域名状态这事拿出去,放到另一个服务器上做。
2,查询域名状态不使用这种同步的方式,改用node.js这种异步模型的实现来做。
nodejs暴力做是一种方法,另一种思路是做一个任务队列,控制总的并发量,比如最高并发50,然后每个用户查询的时候就push100个任务进队列,队列太长的时候可以告诉用户系统忙这样
不过无论如何做,首先要做的是把100个ajax改成1个……
你可以优化一下,不用每个用户都发送100个ajax请求,可以合并成一个ajax请求返回100个域名的状态。
php后端根据要查询的100个域名并发(批量)向whois服务器请求数据,并发的获取结果。
php并发(批量)http请求例子是这样的
<code><?php // 创建一对cURL资源 $ch1 = curl_init(); $ch2 = curl_init(); // 设置URL和相应的选项 curl_setopt($ch1, CURLOPT_URL, "http://whois.com/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "http://whois.com/"); curl_setopt($ch2, CURLOPT_HEADER, 0); // 创建批处理cURL句柄 $mh = curl_multi_init(); // 增加2个句柄 curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $active = null; // 执行批处理句柄 do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 轮询Server返回的结果 while ($active && $mrc == CURLM_OK) { if (curl_multi_select($mh) != -1) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } // 汇总结果...... // 关闭全部句柄 curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); </code></code>
这样能保证一个php进程并发的查询域名状态,而不是一个一个阻塞的去查,非常高效。设置超时时间,就不会导致进程因为网络io给阻塞占满了。
https://github.com/visionmedia/batch 根据你的实际情况调节下参数就行了。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Penalaan prestasi Nginx boleh dicapai dengan menyesuaikan bilangan proses pekerja, saiz kolam sambungan, membolehkan mampatan GZIP dan protokol HTTP/2, dan menggunakan cache dan mengimbangi beban. 1. Laraskan bilangan proses pekerja dan saiz kolam sambungan: worker_processesauto; peristiwa {worker_connections1024;}. 2. Dayakan Mampatan GZIP dan HTTP/2 Protokol: http {gzipon; server {listen443sslhttp2;}}. 3. Gunakan pengoptimuman cache: http {proxy_cache_path/path/to/cachelevels = 1: 2k
