Ich bin ein Anfänger auf node.js und socket.io. Socket.io begann, den binären Stream von 1.0 zu unterstützen, gibt es ein komplettes Beispiel speziell für das Bild, das an den Client gesendet und im Canvas angezeigt wird? DankeSocket.io begann, Binärstrom von 1.0 zu unterstützen, gibt es ein komplettes Beispiel speziell für Bild
Antwort
Die Lösung ist ein bisschen kompliziert, aber sollte in Chrome, Firefox arbeiten, und IE10 + (nicht sicher, über Opera und Safari):
Irgendwo auf der Server-Seite:
io.on('connection', function(socket){
fs.readFile('/path/to/image.png', function(err, buffer){
socket.emit('image', { buffer: buffer });
});
});
Und hier ist, wie Sie es auf einem Client-Griff:
socket.on('image', function(data) {
var uint8Arr = new Uint8Array(data.buffer);
var binary = '';
for (var i = 0; i < uint8Arr.length; i++) {
binary += String.fromCharCode(uint8Arr[i]);
}
var base64String = window.btoa(binary);
var img = new Image();
img.onload = function() {
var canvas = document.getElementById('yourCanvasId');
var ctx = canvas.getContext('2d');
var x = 0, y = 0;
ctx.drawImage(this, x, y);
}
img.src = 'data:image/png;base64,' + base64String;
});
Gerade yourCanvasId
mit Leinwand-ID ersetzen :)
Danke, @CuriousGuy, aber ich bekomme immer den Fehler "Uncaught TypeError: Kann Eigenschaft" Puffer "von undefined nicht lesen und kein Bild in der Client-Seite.irgendeiner Vorschlag? – guoleii
Emittieren Sie Ihr Ereignis nicht wie folgt vom Server: 'socket.emit ('image');'? Wenn ja, versuchen Sie es so: 'socket.emit ('image', {buffer: buf});' – Curious
oh, meine Schuld, vielen Dank, @CuriousGuy, es funktioniert. – guoleii
danke, @sovente, in dieser 1.0 Einführung http://socket.io/blog/introducing-socket-io-1-0/, das ist Code-Snippet auf binäre Unterstützung.
var fs = require('fs');
var io = require('socket.io')(3000);
io.on('connection', function(socket){
fs.readFile('image.png', function(err, buf){
// it's possible to embed binary data
// within arbitrarily-complex objects
socket.emit('image', { image: true, buffer: buf });
});
});
Ich möchte wissen, wie Sie den Puffer auf Client-Seite zu handhaben, Codes sind wie:
socket.on("image", function(image, buffer) {
if(image)
{
console.log(" image: ");
**// code to handle buffer like drawing with canvas**
}
});
von Start socket.io 1.0 ist es möglich, binäre Daten zu senden. http://socket.io/blog/introducing-socket-io-1-0/
Wie die Art und Weise des Sendens und Empfangens von Binärdaten in der offiziellen Dokumentation nicht klar ist. Die einzige Dokumentation ist:
var socket = new WebSocket('ws://localhost');
socket.binaryType = 'arraybuffer';
socket.send(new ArrayBuffer);
Ich schlage vor, Sie bei dieser Antwort einen Blick zu nehmen, wo Sie Code-Implementierung für Server und Client (Javascript, Java) finden:
https://stackoverflow.com/questions/34056705/how-to-send-binary-data-with-socket-io/
Die gute Teil ist, dass es auch auf Android funktioniert!
Prost
- 1. Wann begann MySQL XML-Funktionen zu unterstützen?
- 2. Komplettes Haskore-Beispiel
- 3. Benötigen Sie ein komplettes Beispiel für DynamoDB mit php
- 4. Beispiel zu verwenden socket.io-redis
- 5. Gibt es einen Socket.io-Port zu Dart?
- 6. Beispiel für socket.io chat - sails.js
- 7. Gibt es ein Beispiel für die Implementierung von cv2.KalmanFilter?
- 8. Gibt es eine alternative Möglichkeit, eine private Nachricht mit Socket.io (1.0+) zu senden?
- 9. Gibt es ein gutes Beispiel für ein gut benutzbares Benutzerhandbuch?
- 10. leinwand nicht zeichnen komplettes bild von uri
- 11. Bestimmen, was es begann
- 12. WebAPI 2 + OData v4 komplettes Beispiel
- 13. Socket.IO 1.0.x: Get-Buchse von id
- 14. ANTLR: Gibt es ein einfaches Beispiel?
- 15. Komplettes Beispiel mit Boost :: Signale für C++ Eventing
- 16. socket.io chat beispiel heroku
- 17. Array enthält ein komplettes Subarray
- 18. Gibt es ein Online-Beispiel für alle Farben in System.Drawing.Color?
- 19. Probleme mit Socket.IO (> = 1.0) und Bouncy
- 20. Gibt es Perl-GUI-Builder, speziell für WxPerl?
- 21. wie Bild für iPad-Anwendung, die Retina-Display zu unterstützen
- 22. Gibt es Pläne, Android mit Square's Register API zu unterstützen?
- 23. Ein komplettes ViewModel in ein DisplayTemplate übergeben?
- 24. Gibt es eine Möglichkeit, Schaltflächenformularfunktion in IE10 zu unterstützen/shim?
- 25. Gibt es ein praktisches Beispiel für die Verwendung von Attributen für Methodenparameter in .NET?
- 26. Gibt es Datenbanken, die Protokollpuffer unterstützen?
- 27. Gibt es Betriebssysteme, die Threading nicht unterstützen?
- 28. Gibt es eine Möglichkeit, 'text/plain' in node.js zu unterstützen?
- 29. Gibt es eine Möglichkeit, nicht-HTML5 unterstützen Browser HTML5 zu unterstützen, nicht nur die HTML5-Markup, HTML5 API auch?
- 30. Gibt es eine Möglichkeit, ein weißes PNG-Bild nur mit CSS zu färben?
Ich glaube, Sie nur den Blob auf dem Knoten Quelle lesen müssen und es dann an die Steckdose emittieren, alle Zuhörer den Blob erhalten. Auf der Client-Seite empfehle ich Ihnen, es in Base64 zu kodieren (oder es Server-Seite zu verschlüsseln, wenn Sie sicher sind, dass Sie keine CPU-Probleme haben) und dann folgen Sie diesen Anweisungen: http://StackOverflow.com/questions/16449445/how- can-i-set-image-source-mit-base64 – matteospampani