2010-08-24 13 views
1

Je construis un robot qui extrait des informations en parallèle d'un certain nombre de sites Web en temps réel en réponse à une demande de cette information d'un client. Je dois demander des pages spécifiques de 10 à 20 sites Web, analyser leur contenu pour des extraits d'informations spécifiques et renvoyer cette information au client le plus rapidement possible. Je veux le faire de manière asynchrone, afin que le client obtienne le premier résultat affiché dès qu'il est prêt, alors que les autres demandes sont toujours en attente. J'ai un arrière-plan Ruby, et préfèrerais donc construire la solution dans un Ruby - cependant, le parallélisme et la vitesse sont exactement ce que Ruby est connu pour ne pas exceller. Je crois que des librairies telles que EventMachine et Typhoeus peuvent y remédier, mais je pense aussi fortement au node.js, car je connais assez bien le javascript et semble être construit pour ce genre de chose. Quoi que je choisisse, j'ai aussi besoin d'un moyen efficace de communiquer les résultats au client. Je considère AJAX simple (mais cela nécessiterait d'interroger le serveur), les sockets Web (mais cela nécessiterait fallback pour les navigateurs plus anciens) et des solutions spécifiques pour la communication client/serveur persistante tels que Cramp, Juggernaut et Pusher.Bonne bibliothèque/plate-forme pour un robot d'exploration HTTP en temps réel/parallèle?

Quelqu'un a-t-il de l'expérience et/ou des recommandations qu'il aimerait partager?

Répondre

1

nœud est certainement capable de gérer ce type de tâche - socket async et http communciation est cuit et vraiment agréable à travailler. La plupart de mon travail est j/Ruby et j'ai trouvé la transition vers le JavaScript côté serveur assez indolore - des années de dev web signifient que je connais assez bien et les concepts de développement de serveur sont largement les mêmes, quelle que soit la langue. En termes de communication, Socket.io est un excellent framework client et serveur pour gérer la communication par socket dans un nœud - il supporte les canaux flash, ajax et websocket ce qui signifie qu'il peut être utilisé sur n'importe quel navigateur moderne (et plus ancien).

+0

+1 pour JRuby car il peut gérer vrai multi-thread, mais je suppose que 1,9 travailleraient ainsi que – rogerdpack

0

Si votre robot d'exploration nécessite un support Javascript, je recommande http://htmlunit.sourceforge.net/.
Il y a un wrapper JRuby disponible http://celerity.rubyforge.org/

Caractéristiques (prises à partir du site) comprennent:

  • rapide - Pas de temps GUI rendu ou téléchargements inessentiel
  • Facile à utiliser - API simple
  • Prise en charge JavaScript
  • Évolutivité - Les threads Java permettent d'exécuter des tests en parallèle
  • Portable - grâce multiplateformes à la machine virtuelle Java
  • unintrusive - Pas de fenêtre de navigateur interrompre votre flux de travail (fonctionne en arrière-plan)