2016-06-01 14 views
1

Ich benutze Python SimpleWebSocketServer, mit einer modifizierten SimpleExample.py und Chrome.Lesen String von ArrayBuffer erhalten über Websocket

Alles funktioniert gut, wenn ich Strings vom Browser zu Python sende, aber wenn ich einen String von Python zum Browser sende, habe ich nicht die leiseste Idee, wie man den empfangenen ArrayBuffer (oder Blob, falls konfiguriert) in einen transformiert JavaScript-Zeichenfolge.

Python-Code:

def handleConnected(self): 
    with open("roads.txt") as roadsfile: 
     content = "" + roadsfile.read() 
     self.sendMessage(content) 

Browser Code:

function doConnect() { 
     websocket = new WebSocket("ws://localhost:8000/"); 
     websocket.binaryType = 'arraybuffer'; 
     websocket.onmessage = function(event) { onMessage(event) }; 
    } 

    function onMessage(event) { 
     console.log(event.data); 
    } 

und was protokolliert werden nur ArrayBuffer{} ist, erscheint leer zu sein, denke ich.

Ich weiß nicht, was ich mit diesem ArrayBuffer tun soll, und auch nicht, wie ich auf seine Gültigkeit prüfen soll.

Übrigens, der Dateiinhalt von roads.txt ist eine lange Reihe von textbasierten Gleitkommazahlen, ähnlich wie bei .csv, also wenn ich sie als ein tatsächliches Binärarray kodieren könnte, desto besser!

+0

Dies könnte helfen: https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String?hl=en – ErikR

+0

vielleicht aus "websocket" .binaryType = 'arraybuffer'; 'und sehen, ob Sie eine reguläre Zeichenfolge erhalten können. – domoarrigato

+0

@domoarrigato, jetzt bekomme ich 'Blob {Größe: 70127, Typ:" "}' auf 'console.log' – heltonbiker

Antwort

0

Versuchen Sie, diese - zurück, um die Nachricht als Arraybuffer zu empfangen und gelten so etwas wie dies eine Zeichenfolge zu machen:

function ab2str(buf) { 
    return String.fromCharCode.apply(null, new Uint16Array(buf)); 
} 

function onMessage(event) { 
    console.log(ab2str(event.data)); 
} 

dies setzt voraus, Sie sind ein utf-8 kodierten String zu senden.

+0

beantragt haben. Ich habe das versucht, aber jetzt ist das Konsolenprotokoll leer (leer). – heltonbiker