2012-04-01 7 views
0

Ich schreibe eine App, die eine tägliche Post als Benutzer macht, und nach dem Benchmarking der PHP-Code, der dies tut, dauert es etwa zwei Sekunden pro Benutzer. Ich teile die Arbeit in Chunks auf und benutze mehrere Cron-Jobs für jeden Chunk. Ich möchte eines Tages auf viele tausend Benutzer skalieren, aber diese Art von Arbeitslast ist einfach zu viel. Es würde meinen Server wörtlich den ganzen Tag dauern, um zu jedem einzelnen Benutzer mit dieser Methode zu posten.Ist es möglich, Batch-POST-API-Aufrufe durchzuführen?

Wie machen Menschen das normalerweise? Ich habe andere Apps gesehen, die das tun. Gibt es eine Möglichkeit, alle diese Posts gleichzeitig mit nur einem API-Aufruf zu senden? Die Verwendung einzelner API-Aufrufe pro Benutzer ist verrückt langsam.

Danke.

Antwort

0

Einerseits ist dies vollständig abhängig von der API.

Sie können jedoch einen multi-threaded oder pseudo-parallelen Ansatz verwenden, so dass Ihr Programm zum Beispiel 100 HTTP POST-Anfragen sendet, anstatt eine Anfrage nacheinander nach der anderen zu generieren.

Da Sie PHP verwenden, ist Multithreading out (denke ich), aber diese Frage ist sehr ähnlich zu anderen. Siehe zum Beispiel how these folks recommend curl_multi.

0

Sie können Batch-Abfrage verwenden, um zu erreichen, was Sie brauchen.

Der Code für Batch-Abfrage wird unten erwähnt. Sie können mehr über Facebook Batch-Abfrage beziehen sich auf: http://25labs.com/tutorial-post-to-multiple-facebook-wall-or-timeline-in-one-go-using-graph-api-batch-request/

$body = array(
     'message'  => $_POST['message'], 
     'link'   => $_POST['link'], 
     'picture'  => $_POST['picture'], 
     'name'   => $_POST['name'], 
     'caption'  => $_POST['caption'], 
     'description' => $_POST['description'], 
     ); 

$batchPost[] = array(
    'method' => 'POST', 
    'relative_url' => "/{ID1}/feed", 
    'body' => http_build_query($body)); 
$batchPost[] = array(
    'method' => 'POST', 
    'relative_url' => "/{ID2}/feed", 
    'body' => http_build_query($body)); 
$batchPost[] = array(
    'method' => 'POST', 
    'relative_url' => "/{ID3}/feed", 
    'body' => http_build_query($body)); 

$multiPostResponse = $facebook->api('?batch='.urlencode(json_encode($batchPost)), 'POST'); 
Verwandte Themen