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 相关文章推荐
Z-Blog中用到的js代码
Mar 15 Javascript
javascript实现 在光标处插入指定内容
May 25 Javascript
菜鸟javascript基础资料整理3 正则
Dec 06 Javascript
js 实现浏览历史记录示例
Apr 20 Javascript
使用JavaScript获取电池状态的方法
May 03 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
Apr 29 Javascript
JavaScript暂停和继续定时器的实现方法
Jul 18 Javascript
Webpack优化配置缩小文件搜索范围
Dec 25 Javascript
解决vue props 拿不到值的问题
Sep 11 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
Angular CLI 使用教程指南参考小结
Apr 10 Javascript
js数据类型转换与流程控制操作实例分析
Dec 18 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 google或baidu分页代码
2009/11/26 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
解密效果
2006/06/23 Javascript
兼容ie和firefox js关闭代码
2008/12/11 Javascript
js控制CSS样式属性语法对照表
2012/12/11 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
解析python的局部变量和全局变量
2019/08/15 Python
在Django中实现添加user到group并查看
2019/11/18 Python
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
学期研究性学习个人的自我评价
2014/01/09 职场文书
怎么写自荐书范文
2014/02/12 职场文书
环保建议书300字
2014/05/14 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
2014年秘书工作总结
2014/11/25 职场文书
教师党员自我评价范文
2015/03/04 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
天鹅湖观后感
2015/06/09 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电