ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingมีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: มีวิธีจัดการกับ cURL ไม่ให้กิน Process เยอะบ้างมั้ยครับ  (อ่าน 1685 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
aon_cb
ก๊วนเสียว
*

พลังน้ำใจ: 2
ออฟไลน์ ออฟไลน์

กระทู้: 212



ดูรายละเอียด
« เมื่อ: 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 ครับ
บันทึกการเข้า
TAXZe
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 446
ออฟไลน์ ออฟไลน์

กระทู้: 4,005



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 25 ตุลาคม 2009, 00:24:38 »

 Shocked

- "sleep"
- cache file
- check time curl

 Tongue
บันทึกการเข้า

digitalex
สมุนแก๊งเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 670



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 25 ตุลาคม 2009, 00:43:32 »

เขียนเปิด socket เองครับ เร็วสุดแล้ว Cheesy
บันทึกการเข้า

cracky
ก๊วนเสียว
*

พลังน้ำใจ: 34
ออฟไลน์ ออฟไลน์

กระทู้: 228



ดูรายละเอียด
« ตอบ #3 เมื่อ: 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 คนนึงที่รู้สึกว่าดึงช้าจัง แต่คนอื่นๆก็จะเร้วเท่าเดิม
บันทึกการเข้า

aon_cb
ก๊วนเสียว
*

พลังน้ำใจ: 2
ออฟไลน์ ออฟไลน์

กระทู้: 212



ดูรายละเอียด
« ตอบ #4 เมื่อ: 25 ตุลาคม 2009, 01:07:43 »

เรื่องทำ Cache เห็นทีจะไม่ได้อะครับ เพราะข้อมูลตรงส่วนที่จะไปดึงมามันเป็นลิงค์ครับ
ข้อมูลที่จะไปดึงมา ปะมาณนี้ครับ   http://domain.com/readArticle....A7-2277-4BB7-8AC1-00018637F3E9
จะเห็นว่าค่า token มันเปลี่ยนทุกๆ ครั้งที่ไปดึง ยังไงก็ต้องดึงมาทุกๆ ครั้งอยู่แล้วครับ

ที่ผมอยากจะถามเพิ่มเติมคือ การทำ socket มันคือประมาณไหนอะครับมี Sample code บ้างมั้ยครับ
บันทึกการเข้า
digitalex
สมุนแก๊งเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 670



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 25 ตุลาคม 2009, 02:05:35 »

เปิด socket มันก็คล้ายๆกับพวก curl / file_get_content ล่ะครับ
แต่ทำงานในระดับต่ำกว่าก็เร็วกว่า (อธิบายไม่ค่อยถูก)
รอท่านอื่น มาเหลาต่อ
http://th2.php.net/manual/en/function.fsockopen.php
บันทึกการเข้า

aon_cb
ก๊วนเสียว
*

พลังน้ำใจ: 2
ออฟไลน์ ออฟไลน์

กระทู้: 212



ดูรายละเอียด
« ตอบ #6 เมื่อ: 26 ตุลาคม 2009, 20:36:21 »

ขอบคุณทุกความเห็นครับ
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 26 ตุลาคม 2009, 23:34:31 »

วิธีเขียนโค้ดเปิด socket ที่ง่ายที่สุดคือ
ศึกษาวิธีการใช้ fsockopen ก่อน
แล้วหา sniffer สักตัวมาใช้

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

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

 wanwan020
บันทึกการเข้า

mean
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 121
ออฟไลน์ ออฟไลน์

กระทู้: 1,009



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 26 ตุลาคม 2009, 23:37:09 »

ทำ cache เองครับ แน่นอน และอย่า refresh ๆๆ
และ ทำ cache ไปให้ user ด้วย

ดึงมาลง text file ไว้ครับ แล้วดึงโชว์
บันทึกการเข้า

ttuunn
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 59
ออฟไลน์ ออฟไลน์

กระทู้: 1,324



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 26 ตุลาคม 2009, 23:41:04 »

 wanwan003
ครับ เก็บในรูป txt file ผมกำลังทำอยู่ ไวดีครับ กำลังศึกษาแบบจริงๆจัง
น่าสนใจมากๆครับสำหรับเว็บใหญ่โต
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์