2014-10-21 5 views
5

पर बफर भेजने के साथ समस्या मैं अपने ब्राउज़र में socket.io पर एक बफर भेजने की कोशिश कर रहा हूं। माना जाता है कि यह 1.0 के रूप में समर्थित है।सॉकेट.आईओ

सर्वर कोड:

var tempBuffer = new Buffer(10); 
for (var i=0; i<10; i++) { 
    tempBuffer[i] = i; 
} 
io.sockets.emit('updateDepth', { image: true, buffer: tempBuffer }); 

क्लाइंट कोड:

socket.on('updateDepth', function(data) { 
    console.log("update depth: " + data.buffer + ", " + data.buffer.length); 
}); 

सब कुछ है कि data.buffer छोड़कर क्लाइंट की तरफ अच्छा लग रहा है एक ArrayBuffer (नहीं एक बफर) है और लंबाई अपरिभाषित है (ArrayBuffer में कुछ भी शामिल नहीं लगता है)।

क्या मुझे कुछ स्पष्ट याद आ रहा है या ऐसा नहीं है कि यह काम करना चाहिए? बहुत धन्यवाद!

+1

ऑपरेटिव सवाल यह है कि 'socket.io' वास्तव में भेजने और बाइनरी डेटा प्राप्त करने को संभालने के लिए सुसज्जित है है? मैंने जो उदाहरण देखे हैं वे हमेशा तार या जेएसओएन (अन्य सामान एक स्ट्रिंग में बदल गए हैं), लेकिन मुझे नहीं पता कि इस संबंध में 'socket.io' की क्षमताओं क्या हैं। – jfriend00

+1

आप सॉकेट आईओओ पर एक बाइनरी बफर भेज नहीं सकते हैं। [BinaryJS] पर एक नज़र डालें (http://binaryjs.com/) –

+0

आप अपने बफर को बेसोड एन्कोड कर सकते हैं और उस स्ट्रिंग को भेज सकते हैं। – jfriend00

उत्तर

1

Buffer एक नोड चीज है जिसके लिए ब्राउज़र के पास मूल समर्थन नहीं है, लेकिन वे टाइप किए गए Arrays (एक बफर शिम से बेहतर) का समर्थन करते हैं। तो ब्राउज़र पक्ष पर एक बेहतर कंटेनर का उपयोग करना समझ में आता है।

+0

और, यदि आप socket.io' बाइनरी डेटा स्वीकार नहीं करते हैं तो टाइप किए गए सरणी को भेजने का प्रस्ताव कैसे करें? – jfriend00

+0

सॉकेट.आईओ 1.x बाइनरी डेटा का समर्थन करता है। – mscdex

+0

संदर्भ कृपया। – jfriend00

3

बाहर निकलता है यह ठीक काम कर रहा था। किसी कारण से बफर ने मुझे सीधे इसका उपयोग करने की अनुमति नहीं दी और इसकी लंबाई अपरिभाषित थी। इसे Uint8Array में कनवर्ट करना हालांकि पूरी तरह से काम करता है। मैं अनुमान लगा रहा हूं कि ऐसा इसलिए है क्योंकि socket.io अब बफर ऑब्जेक्ट्स भेज देगा, इस बात की कोई गारंटी नहीं है कि आपके क्लाइंट-साइड जावास्क्रिप्ट को पता चलेगा कि उनके साथ क्या करना है।

यह करता है काम:

socket.on('updateImg', function(data) { 
    var imgArray = new Uint8Array(data.buffer); 
    console.log("update img: " + data.buffer + ", " + data.buffer.length); 
}); 
संबंधित मुद्दे