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 相关文章推荐
解决jquery .ajax 在IE下卡死问题的解决方法
Oct 26 Javascript
jQuery数据显示插件整合实现代码
Oct 24 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
Aug 06 Javascript
js实现具有高亮显示效果的多级菜单代码
Sep 01 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
Oct 08 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
Dec 01 Javascript
JavaScript如何禁止Backspace键
Dec 02 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
Feb 19 Javascript
使用jQuery加载html页面到指定的div实现方法
Jul 13 Javascript
基于jQuery的左滑出现删除按钮的示例
Aug 29 jQuery
atom-design(Vue.js移动端组件库)手势组件使用教程
May 16 Javascript
如何在JavaScript中正确处理变量
Dec 25 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
制作美丽的拉花
2021/03/03 冲泡冲煮
PHP 中的批处理的实现
2007/06/14 PHP
Angularjs基础知识及示例汇总
2015/01/22 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
Javascript实现单例模式
2016/01/24 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
一道写SQL的面试题和答案
2013/11/19 面试题
工作求职自荐信
2014/06/13 职场文书
作文批改评语
2014/12/25 职场文书
婚礼答谢词范文
2015/09/29 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers