Javascript 从iOS到WebSocket的二进制数据

Javascript 从iOS到WebSocket的二进制数据,javascript,ios,google-chrome,websocket,cocoahttpserver,Javascript,Ios,Google Chrome,Websocket,Cocoahttpserver,我正在使用CocoaHTTPServer库,试图将二进制数据传输到web套接字。Web套接字已成功打开,并且可以毫无问题地从iOS接收字符串。然而,当我试图通过套接字发送二进制数据时,我得到一个无法将文本帧解码为Chrome中的UTF-8错误 是否有人通过web套接字成功地从iOS传输二进制数据?(就我而言,这是一个UIImage) CocoaHTTPServer有一个sendData:(NSData*)data方法,我正在使用该方法,但没有成功。当我使用sendMessage:(NSStrin

我正在使用
CocoaHTTPServer
库,试图将二进制数据传输到web套接字。Web套接字已成功打开,并且可以毫无问题地从iOS接收字符串。然而,当我试图通过套接字发送二进制数据时,我得到一个
无法将文本帧解码为Chrome中的UTF-8
错误

是否有人通过web套接字成功地从iOS传输二进制数据?(就我而言,这是一个
UIImage


CocoaHTTPServer
有一个
sendData:(NSData*)data
方法,我正在使用该方法,但没有成功。当我使用
sendMessage:(NSString*)
时,它工作正常(基本上是使用UTF-8编码将
NSString
转换为
NSData

因此我通过正确的编码/解码解决了它

据我所知,
WebSockets
不支持二进制数据传输(虽然我期待它会出现,因为一些教程介绍了如何使用,并且他们讨论了
ArrayBuffer
Blob
作为二进制传输的有效数据类型,可以使用
connection.binaryType='ArrayBuffer'
进行设置。也许它还处于实验阶段?)

因此,在通过传输之前,需要将数据转换为文本数据

在iOS中

WebSocket *socket = ...; // From CocoaHTTPServer
NSData *image_data = ...;
NSString *str_64 = [Helper base64ForData:image_data];  // Can be found at http://cocoadev.com/BaseSixtyFour
[socket sendMessage:str_64];
在JS中

connection.onmessage = function(e)  {
  var msg = e.data;
  var img1 = document.getElementById('img1');
  img1.src = 'data:image/jpeg;base64,' + msg;
}

在Chrome和Safari中测试,效果很好

注意编码到base64是简单但不是必需的正确解决方案性能方面,您正在对编码和解码进行不必要的处理。有一个livio,它是CocoaHttpServer的一个分支,但它实现了websocket二进制发送。我不明白为什么它不是一个plull请求,以及为什么它不包含在coccoapod中,所以你需要使用迦太基而不是coccoapod


但是到目前为止似乎是答案/

如果您对问题或其中一个答案发表评论,请发表评论,而不是回答。