赞
踩
|Opcode | Meaning | Reference |
-+--------+-------------------------------------+-----------|
| 0 | Continuation Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
| 1 | Text Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
| 2 | Binary Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
| 8 | Connection Close Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
| 9 | Ping Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
| 10 | Pong Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
目前就这么多个操作码被定义,其它都是预留的。0和1这两个之前的例子用过的就不说了。2这个操作码是告诉服务器不要把数据转换成字符串,直接当做二进制数据来用。这会在传输图片之类的操作中用到,至于传输图片的例子以后再给吧。这篇主要是介绍后三个操作码。
//客户端程序
var ws=new WebSocket("ws://127.0.0.1:8000");
//服务器程序
var crypto=require('crypto');
var WS='258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
require('net').createServer(function(o){
var key;
o.on('data',function(e){
if(!key){
//握手
key=e.toString().match(/Sec-WebSocket-Key: (.+)/)[1];
key=crypto.createHash('sha1').update(key+WS).digest('base64');
o.write('HTTP/1.1 101 Switching Protocols\r\n');
o.write('Upgrade: websocket\r\n');
o.write('Connection: Upgrade\r\n');
o.write('Sec-WebSocket-Accept: '+key+'\r\n');
o.write('\r\n');
//握手成功后给客户端发送个Ping包
o.write(encodeDataFrame({FIN:1,Opcode:9,PayloadData:"数据"}));
}else{
//解析客户端传过来的数据帧并输出
var data=decodeDataFrame(e);
data.PayloadData=data.PayloadData.toString();
console.log(e);
};
});
}).listen(8000);
Chrome调试工具截图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。