当前位置: 首页 > news >正文

青岛网站建设方案咨询怎样自己做网站

青岛网站建设方案咨询,怎样自己做网站,做装饰工程的在什么网站投标,全能网站模板序幕介绍: WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 讲人话就是说:WebSocket 使得客户端和服务器之间的数据交换变得更加简单,在 WebSocket API 中,浏览器和服务器只需要完成一次握手&#x…

序幕介绍:

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

讲人话就是说:WebSocket 使得客户端和服务器之间的数据交换变得更加简单,在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输

现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

HTML5 定义的 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

WebSocket:

  • 常见方法WebSocket(url):创建WebSocket对象并与指定的URL建立连接
// 创建WebSocket对象并与服务器建立连接
var socket = new WebSocket("ws://example.com");
  • 常见方法send(data):向服务器发送数据
// 向服务器发送数据
function sendData(data) {socket.send(data);console.log("发送数据:" + data);
}
  • 常见方法close(code, reason):主动关闭WebSocket连接
// 主动关闭WebSocket连接
function closeConnection() {socket.close();console.log("关闭WebSocket连接");
}
  • 常见事件:onopen:当WebSocket连接成功打开时触发的事件
// 连接成功时触发的事件
socket.onopen = function(event) {console.log("WebSocket连接已打开");// 发送数据示例socket.send("Hello, server!");
};
  • 常见事件:onmessage:当从服务器接收到消息时触发的事件
// 接收到消息时触发的事件
socket.onmessage = function(event) {var message = event.data;console.log("收到消息:" + message);
};
  • 常见事件:onclose:当WebSocket连接关闭时触发的事件
// 连接关闭时触发的事件
socket.onclose = function(event) {console.log("WebSocket连接已关闭");
};
  • 常见事件: onerror:当WebSocket连接发生错误时触发的事件
// 连接错误时触发的事件
socket.onerror = function(error) {console.error("WebSocket错误:" + error);
};

效果图:

代码展示:

index.html

<html>
<head><meta charset="UTF-8"><title>webrtc demo</title>
</head><body><h1>Websocket简易聊天</h1><div id="app"><input id="sendMsg" type="text" /><button id="submitBtn">发送</button></div>
</body>
<script type="text/javascript">//在页面显示聊天内容function showMessage(str, type) {var div = document.createElement("div");div.innerHTML = str;if (type == "enter") {div.style.color = "blue";} else if (type == "leave") {div.style.color = "red";}document.body.appendChild(div);}//新建一个websocketvar websocket = new WebSocket("ws://172.21.2.52:8099");//连接建立时触发websocket.onopen = function () {console.log("已经连上服务器----");document.getElementById("submitBtn").onclick = function () {// 获取输入的内容var txt = document.getElementById("sendMsg").value;if (txt) {//使用连接发送数据websocket.send(txt);}};};//连接关闭时触发websocket.onclose = function () {console.log("websocket close");};//客户端接收服务端数据时触发websocket.onmessage = function (e) {var mes = JSON.parse(e.data);   // json格式// 渲染showMessage(mes.data, mes.type);};
</script></html>

node.js    记得下载:nodejs-websocket依赖

var ws = require("nodejs-websocket")
var port = 8099;
var user = 0;// 创建一个连接
var server = ws.createServer(function (conn) {console.log("创建一个新的连接--------");user++;// 给连接设置昵称属性conn.nickname = "user" + user;// 给连接设置文件描述符属性conn.fd = "user" + user;var mes = {};// 消息类型为进入聊天室mes.type = "enter";// 消息内容为进入提示mes.data = conn.nickname + " 进来啦"// 广播该消息给所有客户端broadcast(JSON.stringify(mes));//向客户端推送消息conn.on("text", function (str) {console.log("回复 " + str)// 消息类型为普通消息mes.type = "message";mes.data = conn.nickname + " 说:    " + str;broadcast(JSON.stringify(mes));});//监听关闭连接操作conn.on("close", function (code, reason) {console.log("关闭连接");mes.type = "leave";mes.data = conn.nickname + " 离开了"broadcast(JSON.stringify(mes));});//错误处理conn.on("error", function (err) {console.log("监听到错误");console.log(err);});
}).listen(port);function broadcast(str) {server.connections.forEach(function (connection) {connection.sendText(str);})
}

IndexedDB

IndexedDB(索引数据库)是浏览器提供的一种客户端数据库存储解决方案。它允许 Web 应用程序在用户设备上存储大量结构化数据,并可在离线状态下进行查询和操作。IndexedDB 使用对象存储模型,类似于关系型数据库,但不支持 SQL 查询语言。

  • open(): 打开数据库连接
let request = window.indexedDB.open("myDatabase", 1);request.onerror = function(event) {console.log("Failed to open database");
};request.onsuccess = function(event) {let db = event.target.result;console.log("Database opened successfully");
};
  • createObjectStore(): 创建对象存储空间
let objectStore = db.createObjectStore("messages", { keyPath: "id", autoIncrement: true });
  • createIndex(): 创建索引
objectStore.createIndex("type", "user", { unique: false });
  • transaction(): 开启事务
let transaction = db.transaction(["messages"], "readwrite");
  • objectStore.add(): 添加数据到对象存储空间
let objectStore = transaction.objectStore("messages");
let message = { id: 1, type: "text", data: "Hello World", user: "Alice" };let request = objectStore.add(message);
request.onsuccess = function(event) {console.log("Data added successfully");
};
  • objectStore.get(): 通过主键获取数据
let objectStore = transaction.objectStore("messages");let request = objectStore.get(1);
request.onsuccess = function(event) {let data = event.target.result;console.log(data);
};
  • objectStore.getAll(): 获取所有数据
let objectStore = transaction.objectStore("messages");let request = objectStore.getAll();
request.onsuccess = function(event) {let data = event.target.result;console.log(data);
};
  • objectStore.put(): 更新数据
let objectStore = transaction.objectStore("messages");
let message = { id: 1, type: "text", data: "Hello Updated", user: "Alice" };let request = objectStore.put(message);
request.onsuccess = function(event) {console.log("Data updated successfully");
};
  • objectStore.delete(): 删除数据
let objectStore = transaction.objectStore("messages");let request = objectStore.delete(1);
request.onsuccess = function(event) {console.log("Data deleted successfully");
};
  • clear(): 清空对象存储空间中的所有数据
let objectStore = transaction.objectStore("messages");let request = objectStore.clear();
request.onsuccess = function(event) {console.log("Object store cleared successfully");
};

WebSocket加IndexedDB完整代码

WebSocket实现聊天,IndexedDB将聊天数据存储起来,防止刷新丢失

html

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>webrtc demo</title>
</head><body><h1>Websocket简易聊天</h1><div id="app"><input id="sendMsg" type="text" /><button id="submitBtn">发送</button><div id="leaveMessage"></div><div id="chat"></div></div><script type="text/javascript">var db, transaction, objectStore;// 在页面显示聊天内容function showMessage(str, type, user = null, state = 1) {var div = document.createElement("div");var spanStr = document.createElement("span");spanStr.innerHTML = str;if (user != null) {var spanUser = document.createElement("span");spanUser.innerHTML = user;div.appendChild(spanUser);}if (type == "enter") {div.style.color = "blue";} else if (type == "leave") {div.style.color = "red";}div.appendChild(spanStr);document.getElementById("chat").appendChild(div);if (state == 1) {document.getElementById("chat").appendChild(div);} else {document.getElementById("leaveMessage").appendChild(div);}}// 创建或打开 IndexedDB 数据库var request = window.indexedDB.open("chatDB", 1);request.onerror = function () {console.log("无法打开数据库");};request.onupgradeneeded = function (event) {//  获取到数据库对象 dbdb = event.target.result;//  创建名为 "messages" 的对象存储,并指定 "id" 为键路径,并自动递增生成objectStore = db.createObjectStore("messages", { keyPath: "id", autoIncrement: true });// 创建一个名为 "type" 的索引,用于根据消息类型进行检索,允许重复值objectStore.createIndex("type", "user", { unique: false });// 创建一个名为 "data" 的索引,用于根据消息内容进行检索,允许重复值objectStore.createIndex("data", "data", { unique: false });objectStore.createIndex("state", "state", { unique: false });objectStore.createIndex("user", "user", { unique: false });};request.onsuccess = function (event) {db = event.target.result;// 新建一个websocketvar websocket = new WebSocket("ws://172.21.2.52:8099");// 连接建立时触发websocket.onopen = function () {console.log("已经连上服务器----");document.getElementById("submitBtn").onclick = function () {var txt = document.getElementById("sendMsg").value;if (txt) {websocket.send(JSON.stringify(txt));}};// 给输入框添加键盘按下事件监听器document.getElementById("sendMsg").addEventListener("keydown", function (event) {// 检查按下的键是否是回车键(键码为13)if (event.keyCode == 13) {// 取消回车键的默认行为(避免表单提交等操作)event.preventDefault();var txt = document.getElementById("sendMsg").value;if (txt) {websocket.send(JSON.stringify(txt));}}});};// 连接关闭时触发websocket.onclose = function () {console.log("websocket close");};// 客户端接收服务端数据时触发websocket.onmessage = function (e) {var mes = JSON.parse(e.data); // json格式// 渲染if (mes.state == 0) {showMessage(mes.data, mes.type, mes.user);saveMessage(mes)document.getElementById("sendMsg").value = ''} else {showMessage(mes.data, mes.type);}};function saveMessage(message) {let transaction = db.transaction(["messages"], "readwrite");let objectStore = transaction.objectStore("messages");var saveRequest = objectStore.add(message);saveRequest.onsuccess = function () {console.log("消息已保存到 IndexedDB");};saveRequest.onerror = function () {console.log("保存消息时发生错误");};}function loadMessages() {// 创建一个只读事务,该事务用于操作名为 "messages" 的对象存储transaction = db.transaction(["messages"], "readonly");// 获取对 "messages" 对象存储的引用,以便进行后续的操作objectStore = transaction.objectStore("messages");// 回一个获取所有数据的请求var getAllRequest = objectStore.getAll();// 在获取数据成功时触发getAllRequest.onsuccess = function () {var messages = getAllRequest.result;messages.forEach(function (message) {showMessage(message.data, message.type, message.user, 0);});};}// 页面加载完成后加载聊天记录window.onload = function () {loadMessages();};};</script>
</body></html>

node

var ws = require("nodejs-websocket")
var port = 8099;
var user = 0;// 创建一个连接
var server = ws.createServer(function (conn) {console.log("创建一个新的连接--------");user++;// 给连接设置昵称属性conn.nickname = "user" + user;// 给连接设置文件描述符属性conn.fd = "user" + user;var mes = {};// 消息类型为进入聊天室mes.type = "enter";// 消息内容为进入提示mes.data = conn.nickname + " 进来啦";mes.state = 1;// 广播该消息给所有客户端broadcast(JSON.stringify(mes));//向客户端推送消息conn.on("text", function (str) {console.log("回复 " + str)// 消息类型为普通消息mes.type = "message";mes.user = conn.nickname + " 说:";mes.data = str;mes.state = 0;broadcast(JSON.stringify(mes));});//监听关闭连接操作conn.on("close", function (code, reason) {console.log("关闭连接");mes.type = "leave";mes.data = conn.nickname + " 离开了"broadcast(JSON.stringify(mes));});//错误处理conn.on("error", function (err) {console.log("监听到错误");console.log(err);});
}).listen(port);function broadcast(str) {server.connections.forEach(function (connection) {connection.sendText(str);})
}


文章转载自:
http://dinncoescapement.stkw.cn
http://dinncohassel.stkw.cn
http://dinncowhirlblast.stkw.cn
http://dinncocuspidal.stkw.cn
http://dinncomicroplankton.stkw.cn
http://dinncoprolate.stkw.cn
http://dinncoheterogeneous.stkw.cn
http://dinncoaneurysm.stkw.cn
http://dinncodementia.stkw.cn
http://dinncounanimously.stkw.cn
http://dinncoremorseful.stkw.cn
http://dinncocestode.stkw.cn
http://dinncoaswarm.stkw.cn
http://dinncopropagandistic.stkw.cn
http://dinncohempen.stkw.cn
http://dinnconorilsk.stkw.cn
http://dinncoisogamete.stkw.cn
http://dinncotransactinide.stkw.cn
http://dinncobaathist.stkw.cn
http://dinncopotboiler.stkw.cn
http://dinncoashler.stkw.cn
http://dinncoringy.stkw.cn
http://dinncobathychrome.stkw.cn
http://dinnconontitle.stkw.cn
http://dinncopasture.stkw.cn
http://dinncodeferentially.stkw.cn
http://dinncomitsein.stkw.cn
http://dinncoinfallibility.stkw.cn
http://dinncomerton.stkw.cn
http://dinncohangbird.stkw.cn
http://dinncomultidisciplinary.stkw.cn
http://dinncoscrag.stkw.cn
http://dinncodayfly.stkw.cn
http://dinncoinclip.stkw.cn
http://dinncosensuous.stkw.cn
http://dinncosardelle.stkw.cn
http://dinncoradicalization.stkw.cn
http://dinncoagitated.stkw.cn
http://dinncoligase.stkw.cn
http://dinncoextremely.stkw.cn
http://dinncoquadruple.stkw.cn
http://dinncoflashbulb.stkw.cn
http://dinncoplastics.stkw.cn
http://dinncounture.stkw.cn
http://dinncoinstate.stkw.cn
http://dinncolinguini.stkw.cn
http://dinncofoghorn.stkw.cn
http://dinncoincredible.stkw.cn
http://dinncofusicoccin.stkw.cn
http://dinncocoxcombry.stkw.cn
http://dinncophotoionization.stkw.cn
http://dinncocrumena.stkw.cn
http://dinncofcc.stkw.cn
http://dinncofasciculate.stkw.cn
http://dinncostacker.stkw.cn
http://dinncolljj.stkw.cn
http://dinncoporteress.stkw.cn
http://dinncounselective.stkw.cn
http://dinncotouchmark.stkw.cn
http://dinncowindow.stkw.cn
http://dinncodidst.stkw.cn
http://dinncoapplaud.stkw.cn
http://dinncointernational.stkw.cn
http://dinncocitramontane.stkw.cn
http://dinncoinviolately.stkw.cn
http://dinncodisseat.stkw.cn
http://dinncoluminant.stkw.cn
http://dinncoepigamic.stkw.cn
http://dinncolaciness.stkw.cn
http://dinncowoodman.stkw.cn
http://dinncodiplegia.stkw.cn
http://dinncosafecracking.stkw.cn
http://dinncogarnishry.stkw.cn
http://dinncohaemoflagellate.stkw.cn
http://dinncobeamy.stkw.cn
http://dinncotwifold.stkw.cn
http://dinncobullterrier.stkw.cn
http://dinncopelletize.stkw.cn
http://dinncoarchaeological.stkw.cn
http://dinncocysteamine.stkw.cn
http://dinncomisidentify.stkw.cn
http://dinncocotangent.stkw.cn
http://dinnconebulium.stkw.cn
http://dinncoetcaeteras.stkw.cn
http://dinncocavate.stkw.cn
http://dinncogumma.stkw.cn
http://dinncokwangtung.stkw.cn
http://dinncohitachi.stkw.cn
http://dinncoatonable.stkw.cn
http://dinncominuet.stkw.cn
http://dinncofaintish.stkw.cn
http://dinncooap.stkw.cn
http://dinncoedh.stkw.cn
http://dinncoepilepsy.stkw.cn
http://dinncosagittate.stkw.cn
http://dinncomisthink.stkw.cn
http://dinncoindianness.stkw.cn
http://dinncohackberry.stkw.cn
http://dinncobethink.stkw.cn
http://dinncoalbuquerque.stkw.cn
http://www.dinnco.com/news/130446.html

相关文章:

  • 模板网站也可以做优化广告优化师适合女生吗
  • 那个网站做网站托管今日国内新闻最新消息
  • 网站设计主题选择免费的短视频app大全下载
  • 做网站配置站长之家新网址
  • 南丰网站建设广州市疫情最新
  • 网站管理后台源码成都最好的seo外包
  • 网站外部链接怎么做百度青岛代理公司
  • 去哪里做网站比较好seo需要掌握哪些技术
  • wordpress开发工作流郑州seo优化公司
  • 阿里巴巴网站图片如何做白推广文案
  • 佛山顺德网站建设公司网站免费建站
  • 做网站v1认证是什么意思武汉竞价托管公司
  • 大连做网站 首选领超科技微信营销平台有哪些
  • 企业网站 阿里云网站运营指标
  • 手机网站价格上海网络推广服务
  • 可靠的购物网站建设朋友圈的广告推广怎么弄
  • 网站建设三个友好简短的软文范例
  • 苏州网站制作工作室霸榜seo
  • 有没有能帮人快速网站备案的机构关键词优化
  • 做一晚水泥工歌曲网站百度网站推广排名
  • 广东建设局网站首页写软文能赚钱吗
  • 做商城外贸网站营销方案案例范文
  • 重庆电子商务网站建设chatgpt入口
  • 多举措加强政府网站建设外贸获客软件
  • 做动漫网站需要服务器么点石关键词排名优化软件
  • 大连本地服务信息网seo公司是什么意思
  • 烟台本地自己独立商城网站全媒体广告代理
  • 开发系统网站建设济南网站万词优化
  • 做网站花了三万块地推一手项目平台
  • 东台专业做网站武汉百度开户电话