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 相关文章推荐
js操作select控件的几种方法
Jun 02 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
Sep 10 Javascript
js通过地址栏给action传值(中文乱码全是问号)
May 02 Javascript
JS格式化数字金额用逗号隔开保留两位小数
Oct 18 Javascript
jQuery表单验证功能实例
Aug 28 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
Nov 11 Javascript
JavaScript实现in-place思想的快速排序方法
Aug 07 Javascript
BootStrap modal模态弹窗使用小结
Oct 26 Javascript
深入理解ES6之数据解构的用法
Jan 13 Javascript
js实现漂亮的星空背景
Nov 01 Javascript
浅谈vue中$bus的使用和涉及到的问题
Jul 28 Javascript
JavaScript实现贪吃蛇游戏
Jun 16 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目录操作函数之获取目录与文件的类型
2010/12/29 PHP
php判断是否为json格式的方法
2014/03/04 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
php对称加密算法示例
2014/05/07 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
2014/09/25 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
如何把python项目部署到linux服务器
2020/08/26 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
空指针到底是什么
2012/08/07 面试题
绩效工资分配方案
2014/01/18 职场文书
运动会入场词50字
2014/02/20 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
城管综合整治方案
2014/05/01 职场文书
驻村工作先进事迹
2014/08/14 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
2016教师国培研修感言
2015/12/08 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers