2015-11-01 41 views
1

我想解析来自Websockets的框架。 我用Fiddler做了它,它显示了帧的二进制数据。 我需要相同的结果,但我需要通过Javascript或Php(或任何其他语言)获取它。 我想这样做将JS如何从websockets解析二进制数据?

var a = new WebSocket("ws://example.com"); 
a.onopen = function() 
{ 
    console.log("open"); 
    a.send("test"); 
    var b = new Uint8Array([8,6,7,5,3,0,9]); 
    a.send(b.buffer); }; 
a.onmessage = function(e) { console.log(e.data.toString());}; 
a.onclose = function() { console.log("closed");}; 

但我没有收到关于“a.onmessage”的任何数据。 在这一刻,我已经陷入困境。 再次澄清我的问题。 我需要简单的代码示例解析来自websockets的帧。 Example of what I'm trying to parse

谢谢!

+0

如果您在浏览器中的意思是WebSocket的,那么你的运气了。浏览器API只提供消息,而不是帧。帧只是底层传输的一部分。 – gzost

回答

0

使用DataView

var socket = new WebSocket('ws://127.0.0.1:8081'); 
socket.binaryType = 'arraybuffer'; 

socket.onmessage = function (e) { 
    var data = e.data; 
    var dv = new DataView(data); 

    // reads an UInt16 at the beginning 
    var uint16= dv.getUint16(0); 

    // reads next UInt16 (sets 2 bytes of offset, since previous UInt16 takes 2 bytes) 
    var another_uint16= dv.getUint16(0); 
}; 
+0

谢谢你的回应! 我已经在websocket上测试过你的方法ws://51.254.98.30:443 但是我仍然无法收到任何数据。你的方法是否适合你使用这个websocket? 谢谢! –

+0

所以'onmessage'永远不会被调用? (我修正了一个小错字)。试着把一个处理器放在'onerror'上,看看有没有事情发生。 – vtortola