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 判断中文字符长度的函数代码
Aug 27 Javascript
使用jQuery插件创建常规模态窗口登陆效果
Aug 23 Javascript
javascript中的遍历for in 以及with的用法
Dec 22 Javascript
JavaScript获得表单target属性的方法
Apr 02 Javascript
js插件YprogressBar实现漂亮的进度条效果
Apr 20 Javascript
纯javascript实现自动发送邮件
Oct 21 Javascript
jQuery简单实现上下,左右滑动的方法
Jun 01 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
Jan 17 Javascript
spirngmvc js传递复杂json参数到controller的实例
Mar 29 Javascript
JavaScript中call和apply方法的区别实例分析
Aug 03 Javascript
vue中template的三种写法示例
Oct 21 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
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
javascript之更有效率的字符串替换
2008/08/02 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
谈谈JS中的!!
2017/12/07 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
python基础梳理(一)(推荐)
2019/04/06 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
python基于win32api实现键盘输入
2020/12/09 Python
在线课程:Skillshare
2019/04/02 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
临床医师专业个人自我评价
2014/01/08 职场文书
班级旅游计划书
2014/05/03 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
给老师的一封感谢信
2015/01/20 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python
mysql幻读详解实例以及解决办法
2022/06/16 MySQL