websocket 一種通信協定
ajax/jsonp 單工通信
websocket 全雙工通信 性能高 速度快
2種方式:
1、前端的websocket 2、後端的 socket.io
一、後端socket.io
https://socket.io/
安裝: cnpm i socket.io
接收on 發送emit ——可以發送任意類型的資料
後端:
1、建立httpServer
2、建立wsServer var ws = io(httpServer);
3、連接配接
ws.on("connect",function(socket){
//45 發送或者接收
發送 socket.emit("名稱",資料);
廣播 socket.broadcast.emit("名稱",資料);
接收 socket.on(名稱,function(data——資料){
});
});
前端:
1、引入js src="/socket.io/socket.io.js"
2、連接配接
var ws = io("ws://ip:port");
3、發送接收 on/emit
聊天室:
chat.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>無标題文檔</title>
<style>
*{padding:0;margin:0;list-style:none;}
#div1{ position:relative;width:500px; height:400px; border:1px solid red;}
#text{ position:absolute;left:0;bottom:0;width:80%; height:100px;}
#btn1{ position:absolute;right:0;bottom:0;width:20%; height:100px;}
#ul1{width:100%; height:300px; background:#ccc; overflow-y:auto;}
#ul1 li{ line-height:30px; border-bottom:1px dashed red;}
</style>
<!--<script src="/socket.io/socket.io.js"></script>-->
<script src="https://cdn.bootcss.com/socket.io/2.1.1/socket.io.js"></script>
<script>//http://10.30.155.92
//var ws = io("ws://10.30.155.92:9000");
//var ws = io("http://10.30.155.92:9000");
//var ws = io();
var ws = io.connect("ws://10.30.155.92:9000");//标準寫法 ws://
window.onload = function(){
var oUl = document.getElementById("ul1");
var oText = document.getElementById("text");
var oBtn = document.getElementById("btn1");
var name = prompt("請輸入你的使用者名")//"張三";
oBtn.onclick = function(){
//發送資料
var data = {name:name,value:oText.value};
ws.emit("msg",data);
createLi(data);
};
//接收資料 1建立dom
ws.on("msg_all",function(data){
console.log(data);
createLi(data);
});
function createLi(data){
//建立dom
var oLi = document.createElement("li");
oLi.innerHTML = `<strong>${data.name}</strong> <span>${data.value}</span>` ;
oUl.appendChild(oLi);
oUl.scrollTop = oUl.scrollHeight;
}
};
</script>
</head>
<body>
<div id="div1">
<ul id="ul1">
<!--<li><strong>張三</strong> <span>聊天内容</span></li>-->
</ul>
<textarea id="text"></textarea>
<input id="btn1" type="button" value="發送"/>
</div>
</body>
</html>
chat.js
var http = require("http");
var io = require("socket.io");
var fs = require("fs");
//建立http服務
var httpServer = http.createServer(function(req,res){
var url = req.url;
fs.readFile("www" url,function(err,data){
if(err){
res.end("404");
} else {
res.end(data);
}
});
});
httpServer.listen(9000);
//建立websockt服務
var ws = io(httpServer);
ws.on("connection",function(socket){
console.log("wsServer");
//接收資料
socket.on("msg",function(data){
console.log(data);
//發送資料廣播
socket.broadcast.emit("msg_all",data);
});
});
前端H5 WebSocket
ws: http
wss:https
前端配置:
var ws = new WebSocket("ws://ip:port");
ws.onopen = function(evt) {
console.log("Connection open ...");
ws.send("Hello WebSockets!");
};
ws.onmessage = function(evt) {
console.log( "Received Message: " evt.data);
ws.close();
};
ws.onclose = function(evt) {
console.log("Connection closed.");
};
後端:npm i ws
https://www.npmjs.com/package/ws
var wss = new WebSocket({server:httpServer});
wss.on("connection",function(ws,req){
發送 接收
接收
ws.onmessage(function(ev){
//資料 ev.data
});
發送:
ws.send(資料);
資料 最好隻能是字元串!!!
});
==exp:==
h5.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>無标題文檔</title>
<script>
var ws = new WebSocket("ws://localhost:9000");
//建立連接配接
ws.onopen = function(ev) {
console.log("連接配接成功");
};
//接收資料
ws.onmessage = function(ev) {
console.log( "接收資料",ev.data);//server--->client
//發送資料
//ws.send("client--->server");
try{
//隻處理json
var json = JSON.parse(ev.data);
console.log(json);
if(json.type == "click"){
var oSpan = document.getElementById("s1");
oSpan.innerHTML = json.value;
}
}catch(e){
}
};
//連接配接關閉
ws.onclose = function(evt) {
console.log("連接配接關閉");
};
window.onload = function(){
var oBtn = document.getElementById("btn1");
oBtn.onclick = function(){
//發送資料 隻能發送字元串
ws.send(JSON.stringify({type:"click",value:"abc"}));
};
}
</script>
</head>
<body>
h5 WebSocket
<input id="btn1" type="button" value="發送"/><span id="s1">1111</span>
</body>
</html>
h5.js:
var http = require("http");
var WebSocket = require("ws");
var fs = require("fs");
//建立http服務
var httpServer = http.createServer(function(req,res){
var url = req.url;
fs.readFile("www" url,function(err,data){
if(err){
res.end("404");
} else {
res.end(data);
}
});
});
httpServer.listen(9000);
//建立websockt服務
var wss = new WebSocket.Server({ server:httpServer });
wss.on('connection', function connection(ws) {
console.log("wsServer");
//發送 send
ws.send("server--->client");
//接收
ws.on('message', function(message) {
console.log(message);
//ws.send(message);
//廣播
wss.clients.forEach(function(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});
});
愛我所愛無怨無悔
更多專業前端知識,請上 【猿2048】www.mk2048.com