websocket+node.js实现实时聊天系统问题咨询


Posted in Javascript onMay 17, 2017

1.最近新学习websocket。做了一个实时聊天。用Node.js搭建的服务:serevr.js. 两个相互通信页面:client.html 和server.html

但是就是有很多问题,想让知道的人帮我看看哈:

我先把代码贴出来:

server.js:

var ws=require("nodejs-websocket");
 console.log("开始建立连接...");
 var str1=null,str2=null, clientReady=false,serverReady=false;
 var server=ws.createServer(function(conn){
   conn.on('text',function(str){
     console.log(str);
     /**
      * 用户小雨第一次连接
      */
    if(str==="小雨"){
       str1=conn;
       clientReady=true;
       str1.sendText("欢迎"+str); 
    }
    /**
     * 用户小乔第一次连接
     */
    if(str==="小乔"){
       str2=conn;
       serverReady=true;
      str2.sendText("欢迎"+str);
    }
    /**
     * 当有第二个用户连接时。
     */
     if(clientReady&&serverReady){
      str2.sendText(str);
      str1.sendText(str);
    }
   })
   conn.on("close",function(code,reason){
     console.log("关闭连接");
   })
   conn.on("error",function(code,reason){
     console.log("异常关闭")
   });
 }).listen(8082);
 console.log("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" value="小雨" readonly/>
  <button id="conn">连接</button>
  <button id="close">断开</button><br/><br/>
  <div class="kuang" id="mess"></div>
  <div class="input"> 
  <input type="text" class="value" id="value1" />
  <button id="send">发送</button>
  </div>
  <script>
    var name=document.getElementById("name").value;
    var mess=document.getElementById("mess");
    var value1=document.getElementById("value1");
    var conn= document.getElementById("conn");
    var close=document.getElementById("close");
    close.disabled=true;
    if(window.WebSocket){
     conn.onclick=function(){
      var ws=new WebSocket('ws://127.0.0.1:8082');
      conn.disabled=true;
      close.disabled=false; 
       ws.onopen=function(e){
          console.log("连接服务器成功"); 
           ws.send(name);
      } 
    ws.onmessage=function(e){
      var time=new Date();
      mess.innerHTML+=time.toUTCString()+":"+e.data+"<br>";
      document.getElementById("send").onclick=function(e){
        ws.send(name+"说:"+value1.value);
        value1.value=" ";
      }
      document.onkeydown = function(e) {
        e = e || window.event;
        if(e.keyCode == 13) {
           document.getElementById("send").onclick();
          return false;
        }
      }  
    }
    /**
     * 客户端主动断开连接
     * 
     * **/ 
    close.onclick=function(){
      ws.onclose();
      conn.disabled=false;
      close.disabled=true; 
    }  
     ws.onclose = function(e){
       console.log("服务器关闭");
     } 
    ws.onerror = function(){
      console.log("连接出错");
    }
    }  
  }
  </script>
</body>
</html>

server.html 页面和client.html的代码一样,就是用户名字换成小乔啦。

接下来就是问题啦:

1.运行界面:

  client.html  连接以后:

websocket+node.js实现实时聊天系统问题咨询

本来服务器只需要回传一个欢迎小雨的,然后下面还输出了一个。

server.html  小乔连接以后也出来了一个小乔,按理是欢迎小乔。然后告诉小乔小雨在线了。

websocket+node.js实现实时聊天系统问题咨询

2.两个页面代码一样,但是就是不能只变成一个页面,硬要两个才能聊天。

3.server.js那边逻辑有点问题,一直理不清楚。

以上所述是小编给大家介绍的websocket+node.js实现实时聊天系统问题咨询,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript执行效率与性能提升方案
Dec 21 Javascript
js 获取元素下面所有li的两种方法
Apr 14 Javascript
使用jquery写个更改表格行顺序的小功能
Apr 29 Javascript
深入理解JavaScript编程中的同步与异步机制
Jun 24 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
Jun 03 Javascript
原生JS实现在线问卷调查投票特效
Jan 03 Javascript
js制作可以延时消失的菜单
Jan 13 Javascript
从零学习node.js之详解异步控制工具async(八)
Feb 27 Javascript
js获取当前周、上一周、下一周日期
Mar 19 Javascript
vue+springmvc导出excel数据的实现代码
Jun 27 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
Jun 03 Javascript
浅谈javascript如何获取文件后缀名
Aug 07 Javascript
JavaScript简单拖拽效果(1)
May 17 #Javascript
node.js连接MongoDB数据库的2种方法教程
May 17 #Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
May 17 #Javascript
Vue.js鼠标悬浮更换图片功能
May 17 #Javascript
12个非常有用的JavaScript技巧
May 17 #Javascript
Javascript中的async awai的用法
May 17 #Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 #Javascript
You might like
php实现按照权重随机排序数据的方法
2015/01/09 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
PHP 实现链式操作
2021/03/09 PHP
javascript multibox 全选
2009/03/22 Javascript
extjs fckeditor集成代码
2009/05/10 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
Javascript中判断对象是否为空
2015/06/10 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
下载糗事百科的内容_python版
2008/12/07 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
Python基于WordCloud制作词云图
2019/11/29 Python
Django app配置多个数据库代码实例
2019/12/17 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
恶意软件的定义
2014/11/12 面试题
校园安全教育广播稿
2014/02/17 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
校园环保标语
2014/06/13 职场文书
大学生简短的自我评价
2014/09/12 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
创业计划书之校园超市
2019/09/12 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS