2010-09-20 2 views
2

J'ai une API C qui parle au matériel et je veux finalement faire des appels à cette API à partir d'un navigateur. Penser que les bibliothèques de servlets C++ sont trop compliquées, tout comme JNI, je pensais pouvoir prouver le concept comme ceci:Une servlet peut-elle ouvrir une socket pour parler au code natif?

Une servlet java reçoit un simple message de chaîne via HTTP. La servlet ouvre une socket pour transmettre des données via UDP. Le processus C en cours d'exécution ouvre une socket et attend un message. Le processus C reçoit un message, appelle et renvoie un message de chaîne simple via UDP. La servlet transmet le message de réponse au navigateur.

En bref, une servlet peut-elle ouvrir une socket pour parler au code natif (winsock)?

Répondre

0

Oui, ce serait une excellente solution.

Toutefois, une chose que vous devez prendre en compte est de savoir comment les demandes simultanées doivent être traitées lorsque 2 servlets établissent une connexion. Si la bibliothèque/machine, il peut être utile d'utiliser un simple socket qui n'accepte pas les autres connexions une fois la connexion établie. Dans le java, vous pouvez ensuite sérialiser l'accès au socket de la bibliothèque, en utilisant par exemple BlockingQueue, pour avoir un comportement d'accès concurrent bien défini.

Ceci permettra d'éviter les problèmes non répétitifs.

0

Sans raison, pourquoi pas. Tout ce que vous devez faire est de faire une connexion TCP/UDP, et avoir votre serveur C++ en place pour répondre à cela.

0

Une socket est une socket. Les protocoles de couche de transport comme UDP seraient inutiles si vous pouviez seulement les utiliser pour parler à un point de terminaison en utilisant exactement la même implémentation du protocole. L'important est de s'assurer que les deux extrémités s'accordent sur un protocole/format de données pour ce que vous transmettez.