SharedWorker
This commit is contained in:
		
							
								
								
									
										18
									
								
								src/main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/main.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
if (typeof SharedWorker === "undefined") {
 | 
			
		||||
    alert('当前浏览器不支持webworker')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 检查是否存在其它标签页, 如果存在不必建立 websocket 连接, 如果不存在, 则建立 websocket 连接
 | 
			
		||||
const worker = new SharedWorker('/src/worker.js')
 | 
			
		||||
worker.port.onmessage = (e) => {
 | 
			
		||||
    console.log('worker.port.onmessage:', e.data)
 | 
			
		||||
}
 | 
			
		||||
worker.port.start()
 | 
			
		||||
 | 
			
		||||
const button = document.createElement('button')
 | 
			
		||||
button.innerText = 'click'
 | 
			
		||||
button.onclick = () => {
 | 
			
		||||
    worker.port.postMessage('hello, worker')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
document.body.appendChild(button)
 | 
			
		||||
							
								
								
									
										42
									
								
								src/worker.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/worker.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
const ports = []
 | 
			
		||||
 | 
			
		||||
self.onconnect = (e) => {
 | 
			
		||||
    console.log('worker.onconnect:', e)
 | 
			
		||||
    for (const port of e.ports) {
 | 
			
		||||
        port.onmessage = (e) => {
 | 
			
		||||
            console.log('onmessage:', ports)
 | 
			
		||||
            ports.forEach(item => {
 | 
			
		||||
                item.postMessage(e.data)
 | 
			
		||||
            })
 | 
			
		||||
        }
 | 
			
		||||
        port.onclose = () => {
 | 
			
		||||
            console.log('onclose:', ports)
 | 
			
		||||
            var index = ports.indexOf(port)
 | 
			
		||||
            if (index !== -1) {
 | 
			
		||||
                ports.splice(index, 1)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        ports.push(port)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//// 获取当前浏览器是 http 还是 https 以判断使用 ws 还是 wss
 | 
			
		||||
//const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'
 | 
			
		||||
//const host = window.location.host
 | 
			
		||||
//
 | 
			
		||||
//// 向服务器建立 websocket 连接
 | 
			
		||||
//const ws = new WebSocket(`${protocol}://${host}/online?name=client`)
 | 
			
		||||
//ws.onopen = () => {
 | 
			
		||||
//    console.log('ws.onopen')
 | 
			
		||||
//}
 | 
			
		||||
//ws.onclose = () => {
 | 
			
		||||
//    console.log('ws.onclose')
 | 
			
		||||
//}
 | 
			
		||||
//ws.onerror = () => {
 | 
			
		||||
//    console.log('ws.onerror')
 | 
			
		||||
//}
 | 
			
		||||
//ws.onmessage = message => {
 | 
			
		||||
//    console.log('ws.onmessage:', message)
 | 
			
		||||
//    const data = JSON.parse(message.data)
 | 
			
		||||
//    console.log('message:', data)
 | 
			
		||||
//}
 | 
			
		||||
		Reference in New Issue
	
	Block a user