websocket(多個客戶端)
1.websocket是html5開始提供的一種瀏覽器和客戶端進行全雙工通訊的網路技術
現很多網站為了實現即時通訊,所用到的技術是輪詢polling,使用websocket,瀏覽器和伺服器只要做一個握手的動作,在兩者之間形成快速通道
- 實時通訊,可以保持與客戶端的長連線
- 節省資源:互相溝通的header大概2Bytes
- 推送資訊:不需要客戶端請求,伺服器可以主動傳送資料給客戶端
微信小程式的websocket
websocket.wxml:
<input bindchange="sendMsg"></input>
websocket.js(一個連線):
var wsApi='ws://192.168.2.126:3001' //websocket是以ws為統一資源標誌符,類似於 HTTPS
var openBol=false;
Page({
data: {
},
onLoad(){
//建立連線
wx.connectSocket({
url: wsApi,
header:{
'content-type': 'application/json'
},
protocols: ['protocol1'],
success(){
console.log('客戶端連線成功')
}
})
//通過 WebSocket 連線傳送資料。需要先 wx.connectSocket,並在 wx.onSocketOpen 回撥之後才能傳送。
wx.onSocketOpen(function(){
console.log('websocket連線以成功')
openBol=true
})
wx.onSocketMessage((result) => {
console.log(result)
})
},
sendMsg(e){
if(openBol){
wx.sendSocketMessage({
data: e.detail.value,
})
}
}
})
網頁端
socket.html (另一個連線)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>sockets</title>
</head>
<body>
<input type="text" id="txt1">
<script>
var socket=new WebSocket("ws://192.168.2.126:3001")
socket.onopen=function(){
console.log('connect to server')
}
socket.onmessage=function(ev){
console.log(ev.data)
}
var txt1=document.getElementById('txt1')
txt1.onchange=function(){
socket.send(this.value)
}
</script>
</body>
</html>
websock
server.js:(需要安裝ws模組,這裡主要是使用了node,通過node server.js 命令進行啟動)
var WebsocketServer=require('ws').Server;
var wss=new WebsocketServer({
port:3001
})
var sockets=[] //空陣列,儲存所有socket物件
//當客戶端有連線進入的時候會觸發connection 事件
wss.on('connection',function(ws){
sockets.push(ws) //將所有的socket物件push進陣列中
console.log('伺服器端連線建立成功')
ws.on('message',function(msg){//監聽事件,當客戶端傳送資訊給伺服器時,觸發
console.log(msg)
for(var i=0;i<sockets.length;i++){
sockets[i].send(msg)
}
})
ws.on('close',function(){//監聽事件,當客戶端關閉連線時,觸發
for(var i=0;i<sockets.length;i++){
if(sockets[i]==this){ //把關閉連線的websocket物件從sockets陣列中移除
sockets.splice(i,1)
break;
}
}
})
})
相關文章
- java websocket 客戶端JavaWeb客戶端
- websocket如何區分不同的客戶端?Web客戶端
- netty系列之:使用netty搭建websocket客戶端NettyWeb客戶端
- 使用 WebSocket 客戶端連線 MQTT 伺服器Web客戶端MQQT伺服器
- 基於WebSocket的modbus通訊(二)- 客戶端Web客戶端
- Spring Boot 整合 WebSocket 實現服務端推送訊息到客戶端Spring BootWeb服務端客戶端
- springboot2整合websocket,實現服務端推送訊息到客戶端Spring BootWeb服務端客戶端
- ftp客戶端軟體,ftp客戶端軟體哪個好用,使用方法FTP客戶端
- Windows下同時安裝執行多個版本的jmeter客戶端WindowsJMeter客戶端
- 自己動手寫個 Android客戶端Android客戶端
- OrzClick: 國慶寫個 ClickHouse 客戶端客戶端
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- 關於 WebSocket 和 HTTP 區別的思考以及一個最簡單的 WebSocket 的客戶端和伺服器實現WebHTTP客戶端伺服器
- 服務端,客戶端服務端客戶端
- 客戶端,服務端客戶端服務端
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- X-Forwarded-For中多個IP哪個是真實客戶端IP? - adam-pForward客戶端
- 使用 Go 和 ReactJS 構建聊天系統(四):處理多個客戶端GoReactJS客戶端
- 物理DataGuard客戶端無縫切換--客戶端TAF 配置客戶端
- [Redis 客戶端整合] Java 中常用Redis客戶端比較Redis客戶端Java
- FishRedux完成一個玩安卓客戶端Redux安卓客戶端
- 如何建立一個Java遊戲客戶端Java遊戲客戶端
- 神了!兩個高仿 BiliBili 客戶端!客戶端
- 如何實現從 Redis 中訂閱訊息轉發到 WebSocket 客戶端RedisWeb客戶端
- redis客戶端管理Redis客戶端
- iscsi linux客戶端Linux客戶端
- Zookeeper 客戶端 API客戶端API
- 客戶端加解密客戶端解密
- Tower:GIt客戶端Git客戶端
- YouTube macYouTube客戶端Mac客戶端
- Redis-客戶端Redis客戶端
- 客戶端筆記客戶端筆記
- 2020-09-30Socket 一個伺服器監聽多個客戶端 功能實現伺服器客戶端
- C/S(socket、執行緒 實現多個客戶端、伺服器端簡易通訊)執行緒客戶端伺服器
- windows tftp客戶端,教你幾個步驟掌握win7開啟tftp客戶端的方法WindowsFTP客戶端Win7
- ftp客戶端,ftp客戶端軟體具體怎麼使用?FTP客戶端