Thread LZ4 Kompression zwischen JS und Perl (Kompatibilitätsproblem?) (21 answers)
Opened by styx-cc at 2020-04-19 01:22

styx-cc
 2020-04-19 01:22
#191737 #191737
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hallo!

Ich versuche Daten komprimiert zwischen einem Perlscript und einer Webseite auszutauschen, dazu bediene ich mich websockets, was aber vemutlich nebensächlich ist.

Folgende Bibliotheken benutze ich dazu:
LZ4 Javascript:
https://github.com/pierrec/node-lz4/blob/master/bu...

Aus der dazugehörigen Doku:
Code: (dl )
1
2
3
4
5
var fs = require('fs')
var lz4 = require('lz4')

var input = fs.readFileSync('test.lz4')
var output = lz4.decode(input)



CPAN:Compress::LZ4 (Hinweise unter Compatibility wurden beachtet und ausprobiert)


Weiß jemand wieso die beiden benutzten Biblioteken nicht zueinander kompatibel sind oder ob ich sonst etwas falsch mache?
Nachfolgend ein Beispiel bei dem ich erwarten würde, dass der Datenaustausch klappt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="./lz4.js"></script>
</head>
<body>

<button id="btn1">BTN</button>
<textarea type="text" id="to_compress"></textarea>

<p id="p1"></p>
<p id="p2"></p>

<script>
$("#btn1").click(function(){
let text = $('#to_compress').val();

$.ajax({url: "http://95.217.161.88/cgi-bin/test.cgi?p=" + text, success: function(result){
$("#p1").html("Ok! - " + result);

var lz4 = require('lz4');
var output = lz4.decode(result);

$("#p2").html("Ok! - " + output);
}});
});
</script>
</body>
</html>


Das dazugehörige CGI-Script:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
use strict;
use warnings;

use CGI qw/param/;
use Compress::LZ4;

print "Content-type: text/html\n\n";
my $p = param('p');

if ($p =~ m/^[A-Za-z0-9 ]+$/ && length($p) < 1024 ) {
        print lz4_compress($p);
} else {
        print "Invalid characters.\n";
}


Lauffähiges Beispiel (Code wie oben):
http://95.217.161.88/index2.html

Und in der FF-Konsole gibt es Fehlermeldungen a la:
Code: (dl )
Error: Invalid magic number: 31323160 @0 lz4.js:376:22


Wenn das nicht zum Laufen zu bekommen ist, wäre jede Lösung hilfreich, die LZ4 oder LZO auf die oben gezeigte Art und Weise realisierbar machen würde.
Andere Algorithmen würde ich wg. der Laufzeit (Benchmark) eher auschschließen wollen.

Lieben Gruß
Pörl.

View full thread LZ4 Kompression zwischen JS und Perl (Kompatibilitätsproblem?)