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 相关文章推荐
简单实例处理url特殊符号&amp;处理(2种方法)
Apr 02 Javascript
jquery()函数的三种语法介绍
Oct 09 Javascript
node.js中Socket.IO的进阶使用技巧
Nov 04 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
Jan 28 Javascript
jQuery EasyUI datagrid实现本地分页的方法
Feb 13 Javascript
JavaScript中Window对象的属性及事件
Dec 25 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
Jul 09 Javascript
微信小程序简单实现form表单获取输入数据功能示例
Nov 30 Javascript
vue debug 二种方法
Sep 16 Javascript
解决iview多表头动态更改列元素发生的错误的方法
Nov 02 Javascript
JS高阶函数原理与用法实例分析
Jan 15 Javascript
小程序数据通信方法大全(推荐)
Apr 15 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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
php header示例代码(推荐)
2010/09/08 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
学习YUI.Ext第五日--做拖放Darg&amp;Drop
2007/03/10 Javascript
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
JavaScript中的Document文档对象
2008/01/16 Javascript
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
python多进程控制学习小结
2018/10/31 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
怎样比较两个类型为String的字符串
2016/08/17 面试题
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
家具厂厂长岗位职责
2014/01/01 职场文书
syb养殖创业计划书
2014/01/09 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
疾病捐款倡议书
2014/05/13 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
Redis入门基础常用操作命令整理
2022/06/01 Redis