js语言采用的是单线程,所有的任务只能在一个线程上完成,一次只能做一件事,前面的任务没有完成,后面的只能等待 webworker 为js创建多线程环境,主线程创建一个worker线程,将一些耗时任务分配给worker线程,等到worker线程执行完之后,再把结果给主线程
// 1、1.js 是当前主线程的worker线程
var worker = new Worker('./1.js');
// 线程通信
// 向worker线程传递信息
worker.postMessage({msg: '我是从主线程来的', count: 1000000})
// 接收worker线程传递过来的计算结果
worker.onmessage = function(res) {
console.log('主线程里面接收的子线程的结果', res.data);
}
console.log(3333333);
// 监听接收主线程传递的信息 self 自己 代表当前子线程
self.onmessage = function (res) {
console.log('子线程接收到的东西是', res.data);
for (let i = 0; i < res.data.count; i++) {
count += i;
}
console.log(count);
postMessage(count)
}
网络通讯协议
http https 有一个缺陷:通信(请求)只能由客户端(浏览器、前端)发起
前端向后端发送请求,后端接收到之后,返回一个结果;后端是无法主动向前端发送信息的
轮询(每隔一段时间,发送一个请求)客户端每隔一段时间,向服务端发送一次请求,看看服务端有没有新的信息。 经典场景:聊天室、大屏可视化里面的数据
轮询缺点:有延迟、效率低下、非常浪费资源(需要不断地向服务端发送请求询问是否有新的数据)
ws wss 协议标识符
webSocket(ws) 双向通讯 前端可以向服务端发送信息,服务端可以主动向前端推送信息,没有同源限制,客户端可以和任意服务器通信
<textarea id="content" cols="30" rows="10"></textarea>
<button id="send">发送信息</button>
// 1、和websocket服务器建立连接
var ws = new WebSocket('ws://192.168.204.63:3011');
// 建立成功
ws.onopen = function() {
console.log('连接成功!');
}
// 建立失败
ws.onerror = function() {
console.log('连接失败!');
}
send.onclick = function() {
ws.send(content.value);
}
// 接收服务器推送的信息
ws.onmessage = function(res) {
console.log(res);
}