WebSocket实现简单客服聊天系统


Posted in Javascript onMay 12, 2017

一 需求

一个多商家的电商系统,比如京东商城,不同商家之间的客服是不同的,所面对的用户也是不同的。要实现这样一个电商系统的客服聊天系统,那该系统就必须是一个支持多客服、客服一对多用户的聊天系统。

二 思路

使用 Node.js 搭建服务器,安装 websocket 模块、node-uuid模块。通过在客服端和用户端传递 客服ID 和 用户ID 来进行消息的传送。

三 具体实现

3.1 搭建 Node 服务器

参考本人前面的文章 《Centos6.8 下 Node.js 的安装》。

3.2 安装 ws 模块、node-uuid 模块

npm install ws
npm install ws

3.3 创建 server.js

在项目里面新建一个server.js,创建服务,指定8906端口(下面是主要代码,仅供参考)

const WebSocket = require('ws');
onst wss = new WebSocket.Server({ port: 8906 });
const uuid = require('node-uuid');
// 省略一些参数的定义
// 服务端处理连接
wss.on('connection', function(ws) {
  console.log('client [%s] connected', clientIndex);
  var connection_uuid = uuid.v4();
  var nickname = "AnonymousUser" + clientIndex;
  clientIndex += 1;
  clients.push({ "id": connection_uuid, "ws": ws, "nickname": nickname });
  
 //服务器收到消息时
  ws.on('message', function(e) {
   var data = JSON.parse(e);
   var type = data.type;
   // 省略业务处理逻辑
  });

  // ws连接关闭时触发的操作
  ws.on("close", function () {
   websocketClose();
  });
  
  // 省略函数 websocketClose()、wsSend()、socketClose 的定义
  // 聊天服务器关闭所触发的操作
  process.on("SIGINT", function () {
   console.log("SOCKET CLOSED!");
   ("客服已关闭,请稍后再来");
   process.exit();
  });
});

3.4 创建 customer.html

该页面是用户页面。在页面上建立一个WebSocket的连接,并实现向服务器端发送消息(下面是主要代码,仅供参考)

<script>
  //建立连接
  const ws = new WebSocket("ws://22.33.66.88:8906");
  var client_id = '';
  
  //ws连接打开后的操作
  ws.onopen = function (e) {
   //向服务器发送该ws连接的用户信息
  };

  //收到消息处理
  ws.onmessage = function (e) {
   // 省略
  };
   
  //ws连接出错所触发的操作
  ws.onerror = function (e) {
   // 省略
  };

  //ws连接关闭时所触发的操作
  ws.onclose = function (e) {
   // 省略
  };
   
  // 省略函数 appendLog()、sendMessage()、sendMessage2()、wsSendMessage() 的定义
</script>

 3.5 创建 customerService.html

该页面是客服页面,类似于 customer.html,代码方面可参考 customer.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript脚本编程解决考试分数统计问题
Oct 18 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
Feb 02 Javascript
7个让JavaScript变得更好的注意事项
Jan 28 Javascript
JavaScript实现将xml转换成html table表格的方法
Apr 17 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
Jun 19 Javascript
基于jQuery实现点击列表加载更多效果
May 31 Javascript
基于JavaScript实现下拉列表左右移动代码
Feb 07 Javascript
无循环 JavaScript(map、reduce、filter和find)
Apr 08 Javascript
基于jquery实现左右上下移动效果
May 02 jQuery
深入解析koa之异步回调处理
Jun 17 Javascript
JavaScript实现省份城市的三级联动
Feb 11 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
vue2.0结合Element实现select动态控制input禁用实例
May 12 #Javascript
详解微信小程序 相对定位和绝对定位
May 11 #Javascript
Vue通过input筛选数据
Oct 26 #Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
May 11 #Javascript
jQuery遮罩层实例讲解
May 11 #jQuery
在JS中如何把毫秒转换成规定的日期时间格式实例
May 11 #Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 #Javascript
You might like
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
js单例模式的两种方案
2013/10/22 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
Python3 批量扫描端口的例子
2019/07/25 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
python属于解释型语言么
2020/06/15 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
java解析XML详解
2021/07/09 Java/Android
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS