Skip to content

Commit 18a28d0

Browse files
websocket
1 parent 6485794 commit 18a28d0

File tree

13 files changed

+568
-181
lines changed

13 files changed

+568
-181
lines changed

04-常用功能/04-websocket/01-入门.html

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>Document</title>
6+
</head>
7+
8+
<input type="text" id="text" />
9+
<input type="button" onclick="sendMsg();" value="发送数据" />
10+
<input type="button" onclick="getState();" value="获取readyState状态" />
11+
12+
<h1>服务端:node/server.js & php/server.js</h1>
13+
<h2>websocket 特性</h2>
14+
<p>
15+
1.建立在 TCP 协议之上,服务器端的实现比较容易<br>
16+
2.与 HTTP 协议有着良好的兼容性。websocket 把 80 端口作为默认连接端口,握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器,而websocket的运行使用的是443端口<br>
17+
3.数据格式比较轻量,性能开销小,通信高效<br>
18+
4.可以发送文本,也可以发送二进制数据<br>
19+
5.没有同源限制,客户端可以与任意服务器通信<br>
20+
6.协议标识符是ws(如果加密,则为wss),服务器网址就是 URL<br>
21+
</p>
22+
23+
<script>
24+
25+
var ws=new WebSocket("ws://127.0.0.1:8000");
26+
27+
/**
28+
* 获取websocket状态
29+
*/
30+
function getState(){
31+
/**
32+
* 【 readyState 】
33+
* CONNECTING:值为0,表示正在连接
34+
* OPEN:值为1,表示连接成功,可以通信了
35+
* CLOSING:值为2,表示连接正在关闭
36+
* CLOSED:值为3,表示连接已经关闭,或者打开连接失败
37+
*/
38+
switch (ws.readyState) {
39+
case WebSocket.CONNECTING:
40+
alert("state:CONNECTING");
41+
break;
42+
case WebSocket.OPEN:
43+
alert("state:OPEN");
44+
break;
45+
case WebSocket.CLOSING:
46+
alert("state:CLOSING");
47+
break;
48+
case WebSocket.CLOSED:
49+
alert("state:CLOSED");
50+
break;
51+
default:
52+
// this never happens
53+
break;
54+
}
55+
}
56+
/**
57+
* 【 API 】
58+
* 两种事件定义方式
59+
* ws.onopen = function(event){}
60+
* ws.addEventListener('open', function (event) {
61+
* ws.send('Hello Server!');
62+
* });
63+
*/
64+
ws.onopen=function(event){
65+
console.log("Connection open ...");
66+
};
67+
68+
ws.onmessage = function(event) {
69+
console.log("Received data: " + event.data);
70+
71+
if(typeof event.data === String) {
72+
console.log("Received data string: " + event.data);
73+
}
74+
if(event.data instanceof ArrayBuffer){
75+
var buffer = event.data;
76+
console.log("Received arraybuffer: " + buffer);
77+
}
78+
/**
79+
* 可以使用binaryType属性,显式指定收到的二进制数据类型
80+
*
81+
// 收到的是 blob 数据
82+
ws.binaryType = "blob";
83+
console.log(event.data.size);
84+
// 收到的是 ArrayBuffer 数据
85+
ws.binaryType = "arraybuffer";
86+
console.log(event.data.byteLength);
87+
*/
88+
};
89+
90+
ws.onclose = function(event) {
91+
console.log("Connection closed ...");
92+
console.log("服务器断开代码:"+event.code);
93+
console.log("断开理由:"+event.reason);
94+
console.log("wasClean:"+event.wasClean);
95+
ws.close();
96+
};
97+
98+
ws.onerror=function(event){
99+
console.log(event);
100+
};
101+
102+
function sendMsg(){
103+
var content = document.getElementById("text").value;
104+
/**
105+
* 1.发送文本
106+
*/
107+
ws.send(content);
108+
/**
109+
* 2.发送 Blob 对象
110+
*/
111+
// var file = document.querySelector('input[type="file"]').files[0];
112+
// ws.send(file);
113+
/**
114+
* 3.发送 ArrayBuffer 对象
115+
* Sending canvas ImageData as ArrayBuffer
116+
* 实例对象的bufferedAmount属性,表示还有多少字节的二进制数据没有发送出去,可以用来判断发送是否结束
117+
*/
118+
// var img = canvas_context.getImageData(0, 0, 400, 320);
119+
// var binary = new Uint8Array(img.data.length);
120+
// for (var i = 0; i < img.data.length; i++) {
121+
// binary[i] = img.data[i];
122+
// }
123+
// ws.send(binary.buffer);
124+
125+
// var data = new ArrayBuffer(10000000);
126+
// socket.send(data);
127+
// if (socket.bufferedAmount === 0) {
128+
// // 发送完毕
129+
// } else {
130+
// // 发送还没结束
131+
// }
132+
}
133+
134+
</script>
135+
</body>
136+
</html>

04-常用功能/04-websocket/node/index.html

Lines changed: 0 additions & 116 deletions
This file was deleted.

0 commit comments

Comments
 (0)