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 相关文章推荐
HTML-CSS群中单选引发的“事件”
Mar 05 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
Sep 13 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
Mar 13 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
Aug 05 Javascript
javascript中的3种继承实现方法
Jan 27 Javascript
原生Javascript插件开发实践
Jan 09 Javascript
bootstrap按钮插件(Button)使用方法解析
Jan 13 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
Aug 28 jQuery
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
Sep 15 Javascript
JS实现的数组去除重复数据算法小结
Nov 17 Javascript
浅析vue-router原理
Oct 19 Javascript
js调用网络摄像头的方法
Dec 05 Javascript
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中iconv函数使用方法
2008/05/24 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
PHP中header用法小结
2016/05/23 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
python3 xpath和requests应用详解
2020/03/06 Python
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
经理秘书岗位职责
2013/11/14 职场文书
便利店投资的创业计划书
2014/01/12 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
贷款委托书怎么写
2014/08/02 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
2015年教师新年寄语
2014/12/08 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
Consul在linux环境的集群部署
2022/04/08 Servers