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 .匡{宽度: 600像素最小高度: 50px最大高度: 296像素;border: 1px固体;向左浮动:显示器:块;相对位置:溢出-y:滚动;} .值{ width: 200px}。输入{显示:块;绝对位置:左: 0;边距-top : 300 px;}/样式/床头标签连接用户:/标签输入类型=' text ' id=' name '/button id=' conn '连接/button button id='close '断开/button br/br/div class=' Kuang ' id=' mess '/div class=' input ' input type=' text ' class=' value ' id=' value 1 '/button id=' send '发送/button /div脚本var输入=文档。getelementbyid(' name ');var conn=文档。getelementbyid(' conn ');var close=文档。getelementbyid(' close ');var mess=文档。getelementbyid(' mess ');var值1=文档。getelementbyid('值1 ');定义变量模式=/^[\u4e00-\u9fa5]{2,10}$/;close.disabled=trueif(窗口. WebSocket){ conn . onclick=function(){ if(!模式。测试(输入。值){ alert('名称不能为空且必须为中文');返回;} var ws=new WebSocket(' ws ://127。0 .0 .1:8082 ');conn . disabled=true close . disabled=false ws。onopen=功能(e){控制台。日志('连接服务器成功');ws。发送(输入。值);input.setAttribute('readOnly ',' true ');value1.setAttribute('readOnly ',' true ');} ws。on message=function(e){ value 1。移除属性(' ReadOnly ');变化时间=新日期();一团糟。innerhtml=时间。tout cstring()' : ' e . data ' br ';document.getElementById('send ').onclick=函数(e){ ws。发送(输入。“价值”说: '值1。值);值1。值=' ';}文档。onkeydown=函数(e){ e=e | | window。事件;if(例如键码==13){ document。getelementbyid(' send ').onclick();返回false} } } ws。onclose=function(e){ console。日志('服务器关闭');} ws。onerror=function(){ console。日志('连接出错');} /** * 客户端主动断开连接* * * */关闭。onclick=function(){ ws。onclose();ws。发送(输入。值“关闭”)了连接');输入。移除属性(' ReadOnly ');conn . disabled=false close . disabled=true } } }/脚本/正文/html只能说界面丑陋忽略它server.js:
var ws=require(' nodejs-web socket ');console.log('开始建立连接.');var str1=null,str2=null,clientReady=false,server ready=false var a=[];var服务器=ws。createserver(function(conn){ conn . on(' text '),function(str){ a . push(str);if(!客户端就绪){ if(a[0]===str){ str 1=conn;clientReady=truestr1.sendText('欢迎你str);} } else if(!serverReady){ if(str。indexof(' close ')=0){ a . splice(2,1);clientReady=falsestr1=null返回;} if(a[1]===str){ str 2=conn;serverReady=true' str2.sendText('欢迎你str);str1.sendText(str '在线啦,你们可以聊天啦');返回;} } else if(客户端就绪服务器就绪){ str 2。sendtext(字符串);str 1。发送文本(字符串);if(str。indexof(' close ')=0){ a .拼接(2,a .长度);var len=a长度;for(var I=0;我透镜;i ) { //定位该元素位置if(str。indexof(a[I])=0){ a . splice(I,1);if(I==0){ str 1=str 2;} serverReady=falsestr2=null返回;} } } }) conn.on('close ',函数(代码,原因){ console.log('关闭连接');client ready=FastServerReady=false })conn . on('错误,函数(代码,原因){ console.log('异常关闭');});}).听(8082);console.log('websocket连接完毕)简单的截图说明一下:
开启服务,相同页面执行两遍,就可以聊天啦。反正过程就是这样。就是还有一个大的问题。比如我a断开连接了,只有b一个人在连接巨人b还能发信息,可以发信息算可以吧。居然b自己接收自己的信息。那就不能忍了。
就是这种呀,逻辑都错乱了,理清逻辑是个费脑子的事情。有知道的同学吗?怎么处理呀
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
版权声明:nodejs websocket实时聊天系统改进版是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。