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 相关文章推荐
使用jQuery简化Ajax开发 Ajax开发入门
Oct 14 Javascript
映彩衣的js随笔(js图片切换效果)
Jul 31 Javascript
JavaScript Array对象扩展indexOf()方法
May 09 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
Nov 03 Javascript
javascript断点调试心得分享
Apr 23 Javascript
js实现多图左右切换功能
Aug 04 Javascript
引用jquery框架后出错的解决方法
Aug 09 Javascript
微信小程序 video详解及简单实例
Jan 16 Javascript
vue实现消息的无缝滚动效果的示例代码
Dec 05 Javascript
JavaScript实用代码小技巧
Aug 23 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
Mar 29 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
Oct 28 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
python解析xml文件实例分析
2015/05/27 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
pandas对指定列进行填充的方法
2018/04/11 Python
PyQt5响应回车事件的方法
2019/06/25 Python
使用python画社交网络图实例代码
2019/07/10 Python
生物专业个人自荐信范文
2013/11/29 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
异地年检委托书范本
2014/09/24 职场文书
横空出世观后感
2015/06/09 职场文书
职工的安全责任书范文!
2019/07/02 职场文书
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL