视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
nodejs+websocket完成一个聊天系统功能
2020-11-27 20:22:36 责编:小采
文档
 这篇文章主要介绍了nodejs+websocket实时聊天系统的改进版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文属于nodejs+websocket实时聊天系统的改进版本,具体内容如下

自己也是真的菜,一个websocket简单聊天系统硬被我搞了那么些天。

看来以后还是得写更多的代码。

client.html:

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <style>
 .kuang {
 width: 600px;
 min-height: 50px;
 max-height: 296px;
 border: 1px solid;
 float: left;
 display: block;
 position: relative;
 overflow-y: scroll;
 }

 .value {
 width: 200px;
 }

 .input {
 display: block;
 position: absolute;
 left: 0;
 margin-top: 300px;
 }
 </style>
</head>

<body>
 <label>连接用户:</label>
 <input type="text" id="name" />
 <button id="conn">连接</button>
 <button id="close">断开</button><br/><br/>
 <p class="kuang" id="mess"></p>
 <p class="input">
 <input type="text" class="value" id="value1" />
 <button id="send">发送</button>
 </p>
 <script>
 var input = document.getElementById("name");
 var conn = document.getElementById("conn");
 var close = document.getElementById("close");
 var mess = document.getElementById("mess");
 var value1 = document.getElementById("value1");
 var pattern = /^[\u4e00-\u9fa5]{2,10}$/;

 close.disabled = true;
 if (window.WebSocket) {
 conn.onclick = function () {
 if (!pattern.test(input.value)) {
 alert("名称不能为空且必须为中文");
 return;
 }
 var ws = new WebSocket('ws://127.0.0.1:8082');
 conn.disabled = true;
 close.disabled = false;
 ws.onopen = function (e) {
 console.log("连接服务器成功");
 ws.send(input.value);
 input.setAttribute("readOnly", 'true');
 value1.setAttribute("readOnly", 'true');
 }
 ws.onmessage = function (e) {
 value1.removeAttribute("readOnly");
 var time = new Date();
 mess.innerHTML += time.toUTCString() + ":" + e.data + "<br>";
 document.getElementById("send").onclick = function (e) {
 ws.send(input.value + "说:" + value1.value);
 value1.value = " ";
 }
 document.onkeydown = function (e) {
 e = e || window.event;
 if (e.keyCode == 13) {
 document.getElementById("send").onclick();
 return false;
 }
 }
 }
 ws.onclose = function (e) {
 console.log("服务器关闭");
 }
 ws.onerror = function () {
 console.log("连接出错");
 }
 /**
 * 客户端主动断开连接
 * 
 * **/
 close.onclick = function () {
 ws.onclose();
 ws.send(input.value + 'close' + "了连接");
 input.removeAttribute("readOnly");
 conn.disabled = false;
 close.disabled = true;
 }

 }

 }
 </script>
</body>

</html>

只能说界面丑陋忽略它。
server.js:

简单的截图说明一下:

开启服务,相同页面执行两遍,就可以聊天啦。反正过程就是这样。就是还有一个大的问题。比如我a断开连接了,只有b一个人在连接巨人b还能发信息,可以发信息算可以吧。居然b自己接收自己的信息。那就不能忍了。

就是这种呀,逻辑都错乱了,理清逻辑是个费脑子的事情。有知道的同学吗?怎么处理呀

【相关推荐】

1. Javascript免费视频教程

2. Js完成倒计时时差效果

3. 关于JS中递归删除数组中元素的方法详解

4. JS完成星级评分功能的实例详解

5. Js完成倒计时时差效果

下载本文
显示全文
专题