ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: aon_cb ที่ 25 ตุลาคม 2009, 00:09:08



หัวข้อ: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
เริ่มหัวข้อโดย: aon_cb ที่ 25 ตุลาคม 2009, 00:09:08
ผมใช้สคริป cURL ในเว็บ เพจวิวประมาณ 30,000-40,000 ครั้งต่อวัน
แต่เว็บมักจะเข้าช้ามากกกกก บางครั้งถึงกับ request time out ไปเลย แล้วก็เป็นบ่อยๆ เลยเอาสคริปออกไป ปรากฎว่าเร็วขึ้นทันตา

สสคริปเป็นประมาณนี้ครับ



<?
$url="http://www.hdtvmagazine.com/";
function replaceLink($data){
$data= str_replace("<meta name=\"description\" content=\"", "", $data);
return $data;
}
function callArticle(){
global $url;
$user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST,0);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);

$result = curl_exec($ch);
$start_result = strpos($result,"<meta name=\"description\" content=\"");
$end_result = strpos($result,"\" />",$start_result+5);
$substring .= substr($result,$start_result,$end_result-$start_result);
curl_close ($ch);
return replaceLink($substring);
}
?>
<? echo callArticle();?>



เป็นสคริปดึงข้อมูลจากเว็บอื่นมาแสดง เว็บที่ไปดึงก็อยู่ประเทศเดียวกัน แต่คนละรัฐ มีวิธีจัดการให้มันเร็วกว่านี้รึเปล่าครับ เพราะหน้าที่มีสคริปนี้ถูกเรียกพร้อมกันหลายพันครั้ง

Server Ram 2GB ครับ


หัวข้อ: Re: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
เริ่มหัวข้อโดย: TAXZe ที่ 25 ตุลาคม 2009, 00:24:38
 :o

- "sleep"
- cache file
- check time curl

 :P


หัวข้อ: Re: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
เริ่มหัวข้อโดย: digitalex ที่ 25 ตุลาคม 2009, 00:43:32
เขียนเปิด socket เองครับ เร็วสุดแล้ว :D


หัวข้อ: Re: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
เริ่มหัวข้อโดย: cracky ที่ 25 ตุลาคม 2009, 00:57:43
ทำ cache เลยครับ

1.เอา URL ที่ไปดึงมาเก็บไว้ในดาต้าเบส
2.ไปดึงข้อมูลจาก URL นี้่ และบันทึกในรูปแบบ text file ไว้ในโฟลเดอร์ cache

3.ในดาต้าเบส ก็ใส่วันที่ลงไป ว่า URL นี้ เคยดึงล่าสุดวันไหน
4.ถ้ามีการเรียก URL เดิมอีกครั้ง ให้ไปเอาข้อมูลใน text file มาแสดงแทน
5.ทุกครั้งที่มีการ view เช็คว่า URL นี้ดึงล่าสุดวันไหน เราอาจจะตั้งว่า ถ้าเกิน 2 วัน ให้ไปดึงข้อมูลจากเว็ปจริงอีกครั้งหนึ่ง

วิธีนี้ชัวร์สุดครับ อย่างน้อย 2 วันจะต้องมี user คนนึงที่รู้สึกว่าดึงช้าจัง แต่คนอื่นๆก็จะเร้วเท่าเดิม


หัวข้อ: Re: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
เริ่มหัวข้อโดย: aon_cb ที่ 25 ตุลาคม 2009, 01:07:43
เรื่องทำ Cache เห็นทีจะไม่ได้อะครับ เพราะข้อมูลตรงส่วนที่จะไปดึงมามันเป็นลิงค์ครับ
ข้อมูลที่จะไปดึงมา ปะมาณนี้ครับ   http://domain.com/readArticle.php?token=E5C21FA7-2277-4BB7-8AC1-00018637F3E9
จะเห็นว่าค่า token มันเปลี่ยนทุกๆ ครั้งที่ไปดึง ยังไงก็ต้องดึงมาทุกๆ ครั้งอยู่แล้วครับ

ที่ผมอยากจะถามเพิ่มเติมคือ การทำ socket มันคือประมาณไหนอะครับมี Sample code บ้างมั้ยครับ


หัวข้อ: Re: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
เริ่มหัวข้อโดย: digitalex ที่ 25 ตุลาคม 2009, 02:05:35
เปิด socket มันก็คล้ายๆกับพวก curl / file_get_content ล่ะครับ
แต่ทำงานในระดับต่ำกว่าก็เร็วกว่า (อธิบายไม่ค่อยถูก)
รอท่านอื่น มาเหลาต่อ
http://th2.php.net/manual/en/function.fsockopen.php


หัวข้อ: Re: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
เริ่มหัวข้อโดย: aon_cb ที่ 26 ตุลาคม 2009, 20:36:21
ขอบคุณทุกความเห็นครับ


หัวข้อ: Re: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
เริ่มหัวข้อโดย: EThaiZone ที่ 26 ตุลาคม 2009, 23:34:31
วิธีเขียนโค้ดเปิด socket ที่ง่ายที่สุดคือ
ศึกษาวิธีการใช้ fsockopen ก่อน
แล้วหา sniffer สักตัวมาใช้

แล้วลองเปิดเว็บที่ต้องการด้วย browser
แล้วเปิดดูค่าที่ดักใน sniffer หาค่า http header มา

ก็เอามาใช้ในการเปิด socket ได้เลย
ไม่ต้องเขียน header เอง สบายๆ

 :wanwan020:


หัวข้อ: Re: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
เริ่มหัวข้อโดย: mean ที่ 26 ตุลาคม 2009, 23:37:09
ทำ cache เองครับ แน่นอน และอย่า refresh ๆๆ
และ ทำ cache ไปให้ user ด้วย

ดึงมาลง text file ไว้ครับ แล้วดึงโชว์


หัวข้อ: Re: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
เริ่มหัวข้อโดย: ttuunn ที่ 26 ตุลาคม 2009, 23:41:04
 :wanwan003:
ครับ เก็บในรูป txt file ผมกำลังทำอยู่ ไวดีครับ กำลังศึกษาแบบจริงๆจัง
น่าสนใจมากๆครับสำหรับเว็บใหญ่โต