Externe URL's aanroepen zonder vertraging
Ok, de titel is misschien wat vaag, maar ik zit met de volgende vraagstelling cq. probleem:
Inleiding
Ik heb een Adminbackend waar ik mijn nieuws in schrijf. Bij het submitten van een nieuwsbericht roep ik ook de Twitter en Bit.ly API's aan zodat mijn nieuwsbericht ook op Twitter komt, en dat de URL afgekort wordt door Bit.ly.
Het probleem
Nu merk ik op dat er regelmatig duidelijk vertraging optreedt als ik een nieuwsbericht verstuur. De services van Twitter en Bit.ly reageren dan behoorlijk traag.
Hoe zou ik dit aan kunnen pakken? Ik kan wel een cronjob gebruiken, maar dit is voor een algemeen CMS die ik haast zonder crons wil kunnen laten draaien, en ik zat te denken aan iets met AJAX. Ik kan dan natuurlijk hij het submitten de gegevens van het nieuwsbericht (titel, ID) in een buffer-tabel opslaan. En op de achtergrond in mijn CMS dan na het submitten de tabel uitlezen en de API's ermee aanroepen om ze op Twitter te plaatsen.
Maar hoe en wat? Ik loop er even vast in?
Inleiding
Ik heb een Adminbackend waar ik mijn nieuws in schrijf. Bij het submitten van een nieuwsbericht roep ik ook de Twitter en Bit.ly API's aan zodat mijn nieuwsbericht ook op Twitter komt, en dat de URL afgekort wordt door Bit.ly.
Het probleem
Nu merk ik op dat er regelmatig duidelijk vertraging optreedt als ik een nieuwsbericht verstuur. De services van Twitter en Bit.ly reageren dan behoorlijk traag.
Hoe zou ik dit aan kunnen pakken? Ik kan wel een cronjob gebruiken, maar dit is voor een algemeen CMS die ik haast zonder crons wil kunnen laten draaien, en ik zat te denken aan iets met AJAX. Ik kan dan natuurlijk hij het submitten de gegevens van het nieuwsbericht (titel, ID) in een buffer-tabel opslaan. En op de achtergrond in mijn CMS dan na het submitten de tabel uitlezen en de API's ermee aanroepen om ze op Twitter te plaatsen.
Maar hoe en wat? Ik loop er even vast in?
Gewijzigd op 28/12/2011 10:47:39 door - Aar -
Gesponsorde koppelingen:
Als ik het goed begrijp ben je dus op zoek naar een asynchrone call naar die API's, in tegenstelling tot een gebruikelijke synchrone call. Zelf heb ik dit nog nooit gedaan in php, maar deze thread op Stackoverflow kan misschien helpen:
http://stackoverflow.com/questions/962915/how-do-i-make-an-asynchronous-get-request-in-php
Overigens zijn AJAX calls altijd asynchroon, alleen dan doe je het client side terwijl je het volgens mij liever server side zou willen afhandelen (maar dat is mijn interpretatie van jouw probleem).
http://stackoverflow.com/questions/962915/how-do-i-make-an-asynchronous-get-request-in-php
Overigens zijn AJAX calls altijd asynchroon, alleen dan doe je het client side terwijl je het volgens mij liever server side zou willen afhandelen (maar dat is mijn interpretatie van jouw probleem).
Ik wil dus dat in de hele Adminbackend waar ik door aan het browsen ben, dat er op de achtergrond dus een script draait.
Ik zal ook even die link bekijken.
Ik zal ook even die link bekijken.
Je kunt eerst de output regelen, dan de verbinding met de 'gebruiker' sluiten en daarna de rest afhandelen.
Zie ook deze functie:
Zie ook deze functie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
/** Closes the connection
*
* Lets the client stop loading, while PHP continues executing
*
* @access public
* @return void
*/
public function closeConnection()
{
// send close-header
header("Content-Length: " . ob_get_length());
header("Content-Encoding: none");
header('Connection: close');
// flush all output
while (@ob_end_flush());
flush();
// close current session
if (session_id()) session_write_close();
}
/** Closes the connection
*
* Lets the client stop loading, while PHP continues executing
*
* @access public
* @return void
*/
public function closeConnection()
{
// send close-header
header("Content-Length: " . ob_get_length());
header("Content-Encoding: none");
header('Connection: close');
// flush all output
while (@ob_end_flush());
flush();
// close current session
if (session_id()) session_write_close();
}
Gewijzigd op 28/12/2011 12:17:36 door Jacco Brandt



