2010-05-18 7 views
2

J'essaie de commencer à combiner mon expérience PHP (légèrement limitée) avec mon (meilleure) expérience Java, dans un projet où je dois autoriser le téléchargement de fichiers source Java sur le serveur, que le serveur exécute ensuite sur Javac pour le compiler.Planification du site PHP Exécution Java?

Ensuite, à un moment donné (par exemple spécifié lors du téléchargement), je dois l'exécuter une fois sur le serveur, ce qui générera des informations de base de données pour le site PHP à afficher. Pour décrire mes capacités de programmation actuelles, j'ai créé de nombreux programmes Java de bureau et je suis confiant dans le Java «pur», mais jusqu'à présent, j'ai seulement entrepris quelques projets PHP (y compris en utilisant le framework CodeIgniter). Ma motivation pour utiliser PHP comme interface est parce que je sais que c'est très rapide, léger et que je serai capable d'afficher les résultats dont j'ai besoin très facilement (simple lecture DB). Idéalement, la technologie utilisée devrait pouvoir être développée sur un localhost (par exemple WAMP, Tomcat, etc.)

Y a-t-il un conseil que vous pourriez donner sur la technologie que je devrais envisager d'utiliser pour combler cette lacune, et sur ressources pourraient aider à utiliser cette technologie? J'en ai examiné quelques-unes, mais j'ai eu du mal à trouver de la documentation pour aider à réaliser ce dont j'avais besoin.

+0

S'agit-il d'un serveur autogéré dédié ou d'un hôte partagé? – tylermac

+0

Je dois dire que c'est plus difficile de répondre qu'il devrait être. Je ne sais pas exactement ce que je pourrai acquérir, mais il est possible qu'il fonctionne sur un serveur dédié, mais aussi sur un serveur virtualisé sur un matériel partagé. Si possible, toutes les suggestions/liens pour les deux éventualités seraient grands. – obfuscation

+0

Je recommande fortement un environnement dédié ou virtuel pour cela. Quelque chose où vous avez un accès root. Faire cela dans un environnement partagé peut être difficile. – Josh

Répondre

1

Il y a un grand nombre de façons d'aborder cela et vous n'avez pas fourni assez de détails pour vous limiter à un seul chemin, alors j'en proposerai quelques-uns ... Compiler la source java prendra probablement trop de temps demande web normale, donc ma recommandation serait d'avoir le script PHP qui accepte les fichiers source java exécuter une commande d'arrière-plan qui compile les fichiers source et enregistre sa progression dans une base de données ou un fichier journal. De cette façon, vous pouvez rediriger l'utilisateur vers une page qui dit «Veuillez patienter, votre source est en cours de compilation» et utilisez Ajax pour vérifier toutes les quelques secondes pour voir la progression mise à jour. Si c'est l'itinéraire que vous voulez aller vérifier le PHP exec command.

Il peut être plus avantageux pour PHP de simplement créer un ID dans une base de données pour chaque fichier téléchargé et d'appeler le move_uploaded_file pour déplacer les fichiers source vers un répertoire "entrant". De là, un travail cron qui s'exécute de temps en temps peut analyser le répertoire entrant ou la base de données pour les fichiers source, les compiler et mettre à jour la base de données lorsque vous avez terminé.

Dans l'un de ces cas, le programme qui effectue la compilation peut être écrit dans n'importe quelle langue, même Java, si vous préférez.

+0

En ce qui concerne un travail CRON, quel genre de frais généraux y a-t-il? La plupart des mises en ligne seront probablement dans les délais, car il s'agit d'un développement vers un système de soumission. Il semblerait donc inefficace d'exécuter le travail CRON souvent s'il est vraiment nécessaire de le faire plusieurs fois autour d'un délai prédéfini. Y a-t-il une certaine flexibilité dans CRON qui pourrait s'adapter à ce type de système? – obfuscation

+0

Si les téléchargements doivent être traités rapidement, je recommanderais d'utiliser la commande 'exec' de PHP pour démarrer un travail d'arrière-plan à la place. – Josh

+0

La principale préoccupation que je dois garantir est que les envois ont un sens de «priorité» sur le traitement. Dans ce cas, pourriez-vous vous opposer à l'utilisation de exec, puisque je suppose que cela créerait des discussions supplémentaires «concurrentes»? Idéalement, il peut être préférable de créer une sorte de «file d'attente» de téléchargements en attente de traitement, et de les traiter à un débit donné. Y a-t-il une méthodologie que vous suggéreriez dans ce cas?(En Java, je créerais probablement un thread séparé dans lequel les objets sont traités par incréments) – obfuscation