[PHP/Magento] Asynchrone API requests

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bindsa
  • Registratie: Juli 2009
  • Niet online
Ik ben bezig met een Magento koppeling die heel veel API requests moet doen (denk aan ~50.000 - 100.000). Nu kan ik deze requests wel allemaal achter elkaar doen, maar dan heeft het script een paar uur nodig.
Om het proces te versnellen wilde ik aysnchrone requests doen naar een ander script die per keer 1-4 API requests doet.

Ik kwam iets tegen als bijvoorbeeld:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function backgroundPost($url){
  $parts=parse_url($url);
 
  $fp = fsockopen($parts['host'], 
          isset($parts['port'])?$parts['port']:80, 
          $errno, $errstr, 30);
           
  if (!$fp) {
      return false;
  } else {
      $out = "POST ".$parts['path']." HTTP/1.1\r\n";
      $out.= "Host: ".$parts['host']."\r\n";
      $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
      $out.= "Content-Length: ".strlen($parts['query'])."\r\n";
      $out.= "Connection: Close\r\n\r\n";
      if (isset($parts['query'])) $out.= $parts['query'];
   
      fwrite($fp, $out);
      fclose($fp);
      return true;
  }
}


Op zich werkt dit denk ik prima, maar nu krijg ik natuurlijk helemaal geen response meer terug. Op zich geen probleem, maar hoe kan ik nu controleren of de Magento API de requests wel verwerkt en niet een heleboel requests aan het ophopen is?

Iemand hier ervaring mee?

Edit: Net even getest, zonder kijken of het request verwerkt is en elke 3 seconden 5 requests vuren resulteert in een DDoS van de server.

[ Voor 5% gewijzigd door bindsa op 26-06-2012 21:07 ]


Acties:
  • 0 Henk 'm!

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 09:54

Kwastie

Awesomeness

Je geeft aan dat je 50.0000 request tegelijk wilt uitvoeren (achter elkaar) en dat je dit wilt versnellen door ze niet tegelijk te doen.

Ik weet niet precies wat je wilt bereiken maar dit klikt een beetje vreemd. (het spreekwoord: "Hij heeft de klok wel horen luiden, maar weet niet waar de klepel hangt." schoot me binnen)

Is het niet makkelijker om de Magento koppeling zo te maken dat je nog maar een paar (zwaardere) requests doet? Want hoe meer requests je stuurt hoe meer overhead je hebt.

When I get sad i stop being sad and be awesome instead


Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 11-09 23:46
http://guzzlephp.org/

[ Voor 62% gewijzigd door _eXistenZ_ op 27-06-2012 00:25 ]

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Wat is de tijdsspanne waarin die 50.000 tot 100.000 requests moeten gebeuren en wat is de herhalingsfrequentie van deze exercitie?

Ik kan me namelijk geen zinnige koppeling bedenken die dit soort aantallen vaak moet doen en die niet anders aan te pakken is.

Is het slechts een eenmalige exercitie en was de API de makkelijkste programmeerweg dan zou ik er gewoon voor kiezen om lokaal een magento op te zetten en dan daarop de exercitie te doen gevolgd door een db-kopie naar je productie server.

Acties:
  • 0 Henk 'm!

  • danslo
  • Registratie: Januari 2003
  • Laatst online: 10:40
Als het gaat om product imports, kan je kijken naar iets als:
https://github.com/danslo/ApiImport (gemaakt door yours truly ;))

En anders moet je gaan kijken naar multicall...

Acties:
  • 0 Henk 'm!

  • bindsa
  • Registratie: Juli 2009
  • Niet online
Het gaat om een webdienst die import van leveranciers naar Magento webshops afhandelt, elke dag wordt de synchronisatie uitgevoerd.
Pagina: 1