Je dois créer un serveur de journalisation dans java, et une tâche consiste à envoyer les données compressées. Maintenant, je l'envoie ligne par ligne en texte clair, mais je dois le compresser. Le serveur gère la requête "HTTP like". Par exemple, je peux obtenir un journal d'envoi "GET xxx.log". Cela établira une connexion TCP au serveur, la réponse du serveur avec un en-tête et le journal, et fermera la connexion. Le client lit ligne par ligne et analyse chaque entrée de LOG. J'ai essayé certains moyens sans succès. Mon problème principal est que je ne sais pas où chaque ligne se termine (dans la taille du client). Une idée?Envoi de données compressées via le socket
Répondre
La seule chose qui ferait le plus de sens est quelque chose comme ça
- client envoie GET foo.log
- Server envoie "Taille: 15042 \ n"
- Server envoie le fichier journal compressé, toute
- client parse la taille: en-tête (lecture jusqu'à ce qu'un saut de ligne) et sait combien d'octets à attendre
- client lit alors tous les octets du serveur (15042 dans l'exemple)
- client décompresse les données reçues
- client traite ensuite le journal (décompressé, vous trouverez les sauts de ligne)
Vous pouvez jeter un oeil à l'en-tête Range HTTP. Le client peut demander une plage d'octets et le serveur renverra uniquement ces octets. Utilisez la compression GZIP.
Vous pourriez avoir une action que vous appelez du client qui fournira un index, avec des plages d'octets, avant de demander une partie du journal.
Les en-têtes HTTP étant très volumineux, vous pouvez envisager d'envoyer 100 lignes à la fois ou plus. Enfin, regardez le codage de transfert en bloc, qui vous permettra de diffuser les données au client.
Utilisez un GZIPOutputStream sur le serveur et un GZIPInputStream sur le client, avec un InputStreamReader autour de celui-ci et un BufferedReader autour de celui-ci. Alors juste lire les lignes.
Je l'ai essayé, mais quand j'essaye de readline(), il jette cette exception: java.io.EOFException: fin inattendue du flux d'entrée ZLIB – Pizza
Ensuite, il pourrait être bon si vous avez collé un échantillon de code de reproduction dans une nouvelle question. Les flux sont en effet un bon moyen de le faire. –
- 1. Envoi de données sur le socket AF_PACKET
- 2. Refactorisation de socket C# (envoi de données)
- 3. Envoi de struct via Socket en utilisant JAVA et C++
- 4. Envoi de plusieurs messages via send() recv(), Programmation socket, C
- 5. Envoi de données arbitraires via plusieurs fonctions
- 6. Envoi de données au serveur via le port 5555 C#
- 7. C#, socket via le routeur
- 8. Envoi de fichier via le maillage pair
- 9. Envoi de beaucoup de données via POST ou GET
- 10. Envoi Gmail via C#
- 11. Envoi de données - NSMutableURLRequest
- 12. Envoi de messages via l'application
- 13. Envoi de données XML via HTTP POST avec PHP
- 14. Envoi de données à un site Web via HTTP
- 15. Envoi de données binaires avec Indy via TCP \ IP, comment?
- 16. Envoi d'un fichier via le profil push OBEX
- 17. Envoi de données structurées via un canal nommé (Linux)
- 18. Envoi de données via POST en Python pour PHP
- 19. Objectif c - Envoi d'une quantité fixe de données sur le socket?
- 20. Stockage des données compressées dans un cookie
- 21. Envoi MIDI via USB via Arduino
- 22. Comment traiter les données compressées en Java
- 23. Envoyer un objet sérialisé via le socket
- 24. Envoi d'informations de connexion via AJAX
- 25. Envoi de classes Linq à SQL via le service Web
- 26. Envoi d'un message xml en pièces via un socket TCP en utilisant Qt
- 27. urllib2 envoi de données
- 28. Envoi de tampons de protocole via REST
- 29. Envoi de données volumineuses> 1 Mo via Windows Sockets viz en utilisant la fonction Envoyer
- 30. Réception de messages via un socket
cela ne fonctionne pas pour moi, parce que je veux traiter les lignes aussi vite que possible (les fichiers journaux peuvent être très grands) – Pizza
Ensuite, le faire en morceaux, répétez les étapes 3 à 6 en morceaux de taille octets –