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 相关文章推荐
JS 日期验证正则附asp日期格式化函数
Sep 11 Javascript
学习javascript,实现插入排序实现代码
Jul 31 Javascript
jquery验证表单中的单选与多选实例
Aug 18 Javascript
JavaScript中读取和保存文件实例
May 08 Javascript
JQuery实现表格动态增加行并对新行添加事件
Jul 30 Javascript
理解Javascript的动态语言特性
Jun 17 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
Nov 30 Javascript
jQuery中绑定事件bind() on() live() one()的异同
Feb 23 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
May 12 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
Nov 17 Javascript
JavaScript 常见的继承方式汇总
Sep 17 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与ASP
2006/10/09 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
input 输入框内的输入事件详细分析
2010/03/17 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
js判断密码强度的方法
2020/03/18 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
简述 Python 的类和对象
2020/08/21 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
外贸主管求职简历的自我评价
2013/10/23 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
企业授权委托书范本
2014/04/02 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android