xorg1990
New member
Nee leider geht das auch nicht, da selbst wenn ich einen 3000byte großen Puffer zum esp sende und exakt diesen wider zurücksende dauert es zu lange. im Browser läuft der puffer über. Der Code ist denkbar einfach.tsseh schrieb:wenn du die 3000 byte immer im block zum esp sendest und dann diesen block auf dem esp nochmal in 128 byte blöcke unterteilst und zum avr sendest sollte das doch gehen. hast halt ne halbe sekunde Verzögerung drin
Außerdem kommt kein onmessage event wenn der zu sendete Puffer größer ist als 1024byte.
Code:
var bufferSize = 16384;
var chunkSize = 128;
var sendTime = 0;
let canTransmit = false;
let Uint8Buf = new Uint8Array(bufferSize*4);
var bufferMask = Uint8Buf.length-1;
resampler.resampleOutput = function(output){
if(connected){
for (let i=0;i<output.length;i++){
let next = ((w_ptr + 1) & bufferMask);
if (r_ptr == next){
console.log("buffer voll");
break;
}
let filterSample = FirFilter.pushSample(output[i]);
let s = Math.max(-1, Math.min(1, filterSample));
s = parseInt(s*127+128);
Uint8Buf[w_ptr] = s;
w_ptr=next;
if(next == chunkSize && canTransmit == false){
canTransmit == true;
transmit();
}
}
}
}
function transmit(){
var subBuffer = Uint8Buf.subarray(r_ptr,r_ptr+chunkSize);
if (r_ptr == w_ptr){
console.log("buffer leer");
return;
}
r_ptr = (r_ptr+chunkSize) & bufferMask;
sendTime = performance.now();
WsConnection.send(subBuffer);
}
function handleOnmessage(e){
var rtime = performance.now() - sendTime;
console.log(rtime);
transmit();
//console.log(e.data.byteLength);
}
Code:
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
switch(type) {
case WStype_DISCONNECTED:
Serial.println("Disconnected");
break;
case WStype_CONNECTED:
{
IPAddress ip = webSocket.remoteIP(num);
}
break;
case WStype_BIN:
// send message to client
webSocket.sendBIN(num, payload, length);
break;
}
}
next == chunckSize && canTransmit == false
Irgendwann kommt dann console.log("buffer voll");
Die ~100ms sind für die 128 blöcke -richtig.tsseh schrieb:die ~100 ms waren für die 128byte blöcke? wächst das in etwa linear an wenn du 1024 byte blöcke nimmst?
Ja da wächst was linear an und zwar das senden vom esp zum Browser hin bei 1024byte großen Blöcken kommen die Events total unregelmäßig. Bis sogar die Socket Verbindung geschlossen wird "invalid frame..irgendwas". Bei 128-512 großen Blöcken kommt der Message event viel regelmäßiger, keine ausfälle.
Da habe ich jetzt festgestellt, da ich nun eine Sende /Empfangs Umschaltung mache.
Ajax habe ich getestet und ist ~50ms langsamer aber die callbacks kommen viel gleichmäßiger nicht so wirr wie beim Websocket.
