默认
发表评论 11
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教各位前辈:web在线客服系统消息传递构思
阅读(30029) | 评论(11 收藏 淘帖
最近在设计一个web客服系统,消息传递过程整理思路如下,还请各位前辈拨冗给指点一下:

1. 客户端发起会话请求,通过webscoket和服务器建立了连接,发送消息到服务器。这里的问题是此处的服务器连接是否需要使用url/clientid的形式以创建一个特定的websocket通道?clientid是客户端的一个唯一数,比如用JsessionID或者微信的openid。
2. 服务端(Java/C#)接到客户端消息后,以clientid作为key把这个websocket对象存入redis,并把消息本身也存入数据库,记录消息时间。服务端检查该clientid有没有关联的坐席id,因为是首次接入还没有坐席响应,服务端代码根据预定以的规则定位一个空闲的客服坐席,定位后把这个坐席的id跟clientid关联,表示将由这个坐席处理该用户的消息。
3. 坐席页面定时刷新数据,发现有分配给自己的会话,点击后从后台数据中加载用户的消息。同时客服的页面也跟服务端建立一个websocket连接,以坐席id和对端clientid为key把websocket对象放入redis。坐席发送的消息和对端的clientid到达服务端,服务端代码获取到消息,解析出消息体和对端的clientid,并且从redis里找到对应websocket对象,利用websocket.send方法把发给消息发给客户端。此处的问题是如果是集群部署,每个服务器怎么获取自己需要的消息?
4. 客户端接到消息后进行解析并显示在页面上。

以上思路不知道是否正确,合理,十分感谢~

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

推荐方案
评论 11
我没做过客服系统,但对于即时通讯的知识来说,应该是相通的。
1里面的id只要不重复就可以了~
3不需要定时刷新,因为都websocket了,有新的分配直接实时就推过来了~
其它的思路看起来差不多就是这样了~
签名: 不想上班,啦啦啦
你的思路在体上是这样的,但你现在的主要问题的疑惑是什么?

另外,如果从零开始撸Websocket,工作量和技术难度还是很大的,勉强把系统凑起来的话,底层的网络稳定性这些问题,如果没有经验的话,就够你喝一壶的了。你可以考虑一些现成的方案,你可以看看我写的这篇文章《MobileIMSDK-Web的网络层框架为何使用的是Socket.io而不是Netty?》,里面的一些方案的对比分析和取舍,仅供参考。
引用:JackJiang 发表于 2018-07-06 15:09
你的思路在体上是这样的,但你现在的主要问题的疑惑是什么?

另外,如果从零开始撸Websocket,工作量和 ...

嗯嗯,到时候应该会采用socketio,如果MobileMSDK更可靠也会考虑。
主要的问题已经更新了,开始没有编辑好,谢谢~
引用:大马仕格 发表于 2018-07-06 15:06
我没做过客服系统,但对于即时通讯的知识来说,应该是相通的。
1里面的id只要不重复就可以了~
3不需要定 ...

哦哦,对啊,坐席端登录的时候就可以把websocket通道建立起来了,并注册到后台数据里面。
引用:patricky 发表于 2018-07-06 15:53
嗯嗯,到时候应该会采用socketio,如果MobileMSDK更可靠也会考虑。
主要的问题已经更新了,开始没有编辑 ...

第1个问题,如果自已人零来实现的话,思路就是这样的,没有问题。
第2个问题,先别考虑集群了,步子别太大
引用:JackJiang 发表于 2018-07-06 16:45
第1个问题,如果自已人零来实现的话,思路就是这样的,没有问题。
第2个问题,先别考虑集群了,步子别太 ...

单机大概能撑住多少个会话呢?
引用:JackJiang 发表于 2018-07-06 16:45
第1个问题,如果自已人零来实现的话,思路就是这样的,没有问题。
第2个问题,先别考虑集群了,步子别太 ...

如果可以不从0开始最好,但是目前没有找到可以复用的东西,您有推荐么
引用:patricky 发表于 2018-07-09 09:03
如果可以不从0开始最好,但是目前没有找到可以复用的东西,您有推荐么

你可以看看MobileIMSDK-Web,借鉴一下:http://www.52im.net/thread-1248-1-1.html
引用:JackJiang 发表于 2018-07-09 09:50
你可以看看MobileIMSDK-Web,借鉴一下:http://www.52im.net/thread-1248-1-1.html

好的,倾向于使用开源方案,甲乙双方都比较放心。如果是个人开发的话,会考虑的~
如果客服要有接待限制,用户就要进入排队,这功能怎么实现。
引用:asf_jewely 发表于 2018-09-19 16:47
如果客服要有接待限制,用户就要进入排队,这功能怎么实现。

这种逻辑你可能得用上redis这种缓存了
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部