WebSocket 对象提供了用于创建和管理WebSocket连接,以及可以通过该连接发送和接收数据的 API。
属性:
-
WebSocket.binaryType
使用二进制的数据类型连接 -
WebSocket.bufferedAmount (只读)
未发送至服务器的字节数 -
WebSocket.extensions (只读)
服务器选择的扩展 -
WebSocket.onclose
用于指定连接关闭后的回调函数 -
WebSocket.onerror
用于指定连接失败后的回调函数 -
WebSocket.onmessage
用于指定当从服务器接受到信息时的回调函数 -
WebSocket.onopen
用于指定连接成功后的回调函数 -
WebSocket.protocol (只读)
服务器选择的下属协议 -
WebSocket.readyState (只读)
当前的链接状态 -
WebSocket.url (只读)
WebSocket 的绝对路径
方法
- WebSocket.close([code[, reason]])
关闭当前链接 - WebSocket.send(data)
向服务器发送数据
🤒好吧!!! 一本正经的抄MDN文档
开始摸手
安装node不提。
1、安装WebSocket
$ npm install ws
2、创建package.json (那些选项不懂可以Google)
$ npm init
3、新建index.html 用于访问
4、新建index.js 用于写node服务器
文件
index.js文件
const WebSocket = require('ws');// 导入WebSocket模块:
const WebSocketServer = WebSocket.Server;// 引用Server类:
const wss = new WebSocketServer({ port: 3000 });// 实例化: 端口3000
index.html
var sock = new WebSocket('ws://localhost:3000');
sock.onopen = (params) => {
console.log('连接成功!');
console.log(params);
}
sock.onerror = (error) => {
console.log('连接失败!');
console.log(error);
}
运行
$ node index.js
在浏览打开index.html文件
打开控制台 ==> Network ==> WS
如下图
走到这一步说明你已经成功连接了吧!!
接下来使用send()
传输数据。
1、客户端 ==> 服务器端
index.html
var sock = new WebSocket('ws://localhost:3000');
sock.onopen = (params) => {
console.log('连接成功!');
console.log(params);
sock.send('我是前台数据')
}
sock.onerror = (error) => {
console.log('连接失败!');
console.log(error);
}
index.js //服务器端
const WebSocket = require('ws');// 导入WebSocket模块:
const WebSocketServer = WebSocket.Server;// 引用Server类:
const wss = new WebSocketServer({ port: 3000 });// 实例化: 端口3000
wss.on('connection', function(ws) {
// 接收客户端数据
ws.on('message', (message)=> {
console.log(message); //我是前台数据
});
})
看浏览器控制把数据传过去
客户端-控制台
可以看得出控制台打印出,客户端传给后台的数据。
服务器端-控制台2、客户端 <== 服务器端
一样的操作。直接上代码!
index.html
sock.onmessage = function (ms) {
console.log(ms);
}
客户端使用onmessage
接收数据
index.js
wss.on('connection', function(ws) {
// 接收客户端数据
ws.on('message', (message)=> {
console.log(message);
ws.send('我是后台数据') //服务器发送数据给客户端
});
})
控制台.png
就到这吧!上全代码!!
index.html
<div id="content">
<div id="log"></div>
</div>
<div id="sendCtrls">
<input id="name" name="name" type="text" />
<button id="button">发送</button>
</div>
<script>
var name = prompt('你叫什么名字???')
var sock = new WebSocket('ws://localhost:3000');
var log = document.getElementById('log')
sock.onopen = (params) => {
// 发送名字
sock.send(JSON.stringify({
type: 'name',
data: name
}))
}
// 接收数据
sock.onmessage = function (ms) {
var json = JSON.parse(ms.data)
log.innerHTML += `${json.name} <${json.time}> <br>${json.data}<br>`
}
// 提交输入的数据
document.getElementById('button').onclick = function () {
var text = document.getElementById('name').value
// sock.send(text)
// 时间
var date = new Date();
h = date.getHours() + ':';
m = date.getMinutes() + ':';
s = date.getSeconds();
sock.send(JSON.stringify({
type: 'message',
data: text,
time: h+m+s
}))
log.innerHTML += `自己 <${h+m+s}> <br>${text}<br>`
document.getElementById('name').value = ''
}
</script>
index.js
const WebSocket = require('ws');// 导入WebSocket模块:
const WebSocketServer = WebSocket.Server;// 引用Server类:
const wss = new WebSocketServer({ port: 3000 });// 实例化: 端口3000
wss.on('connection', function(ws) {
// 接收客户端数据
ws.on('message', (message)=> {
message = JSON.parse(message)
if(message.type == 'name'){
ws.userName = message.data;
return;
}
wss.clients.forEach((client)=>{
// 过滤相同的消息
if(client != ws){
// ms.send(message)
client.send(JSON.stringify({
name: ws.userName,
data: message.data, //注意是message
time: message.time
}))
}
})
});
// 关闭 断开的客户端
ws.on('close',function () {
console.log('什么鬼---------');
})
});
PS:运行可以打开多个index.html进行操作。
可以下载DEMO 试着运行
网友评论