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字符串处理性能的代码
Dec 07 Javascript
使用jQuery.wechat构建微信WEB应用
Oct 09 Javascript
node.js中的buffer.toJSON方法使用说明
Dec 14 Javascript
JQuery插入DOM节点的方法
Jun 11 Javascript
JavaScript中使用Math.PI圆周率属性的方法
Jun 14 Javascript
js如何实现点击标签文字,文字在文本框出现
Aug 05 Javascript
AngularJS实现按钮提示与点击变色效果
Sep 07 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
H5图片压缩与上传实例
Apr 21 Javascript
Angular2中select用法之设置默认值与事件详解
May 07 Javascript
vue内置组件transition简单原理图文详解(小结)
Jul 12 Javascript
vue的路由映射问题及解决方案
Oct 14 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 数组遍历顺序理解
2009/09/09 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
python几种常用功能实现代码实例
2019/12/25 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
python实现简单的购物程序代码实例
2020/03/03 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
Python如何执行系统命令
2020/09/23 Python
eBay奥地利站:eBay.at
2019/07/24 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
小学教师听课制度
2014/02/01 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
表扬信格式模板
2015/05/05 职场文书
护士旷工检讨书
2015/08/15 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript