最近在开发一个游戏的客服系统,同一时间咨询问题的玩家多,为了保证服务器高可用,需要利用分布式,另外服务器宕机还需要玩家无感知重连,最关键的一点是如何实现服务器的高扩展性,即性能不足时,如何以最少的代价增加一台新的服务器。

1.单台websocket

单台消息互传实现十分简单,通过websocket中转就可以了,不再多加赘述。

2.多台websocket

当客户端不在同一台服务器上时,如何实现消息互通?

一开始的时候,我是想着把server A 与 server B 通过websocket连接起来,互发消息,这种方案在服务器数量小的时候,维护起来也不算麻烦。

例如增加server C 就要把 A、B、C连起来,但是每增加一台服务器,工作量指数级增长,还要考虑到服务器宕机、服务器心跳的各种问题,想想都头疼。

3.多台websocket消息推送

这下舒服了。

1.使用全局redis存储客户端与服务端的关系;

2.webscoket服务器各自订阅不同的消息队列。

发消息流程:

情况一:

clientA 给 clientB 发消息时,先从缓存中读取clientB在哪个服务器上,发现clientA 与clientB 在同一服务器时,消息直接发送至clientB

情况二:

clientB 给 clientC 发消息时,从缓存中读到clientC和clientB并不在同一服务器上,例如clientC在wsB,那么clientB将消息发送到rabbitmq队列B,然后rabbitmq推送到wsB,wsB给clientC发送消息。

4.总结

  1. 新增服务器只需要多订阅一条消息队列。
  2. 服务器宕机时,客服端重连websocket,重新绑定redis的server关系。
  3. rabbitmq的ack机制保证消息的可靠性。

5.改进

压缩消息,节省带宽。推荐使用google的protobuf,就是稳。

【转】分布式websocket服务器相关推荐

  1. python游戏服务器框架_mqant首页、文档和下载 - Golang/python语言开发的分布式游戏服务器框架 - OSCHINA - 中文开源技术交流社区...

    mqant mqant 是一款基于 Golang 语言的简洁,高效,高性能的分布式游戏服务器框架,研发的初衷是要实现一款能支持高并发,高性能,高实时性的游戏服务器框架,也希望 mqant 未来能够做即 ...

  2. 深入浅出Websocket(二)分布式Websocket集群

    前言 最近在构建两个系统的实时通信部分,总结一下所学. 这是一个系列文章,暂时主要构思四个部分 深入浅出Websocket(一)Websocket协议 深入浅出Websocket(二)分布式Webso ...

  3. 分布式 WebSocket 集群解决方案

    作者 | weixin_34194702 来源 | blog.csdn.net/weixin_34194702/article/details/88701309 问题起因 最近做项目时遇到了需要多用户 ...

  4. IM即时通信分布式后端方案(分布式websocket)

    最近在准备春招项目时碰到了一个问题,在自己的项目中想实现聊天的功能,传统的http请求轮询对服务器资源太浪费,于是采用websocket. websocket通信需要依靠javax.websocket ...

  5. pomelo分布式聊天服务器详解

    pomelo分布式聊天服务器详解 2014-01-05 11:43:49|  分类: node |  标签:pomelo  pomelo聊天  nodejs分布式聊天  pomelo分布式  |举报| ...

  6. python websocket异步高并发_Python3.5异步和多个websocket服务器

    我在Ubuntu上使用pythonwebsockets4.0.1.我想有2个websocket服务器运行.我可以通过为每个线程创建2个线程和独立的事件循环来实现这一点.我所说的"某种工作&q ...

  7. js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...

    本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...

  8. 在IIS上搭建WebSocket服务器(三)

    在IIS上搭建WebSocket服务器(三) 原文:在IIS上搭建WebSocket服务器(三) 编写客户端代码 1.新建一个*.html文件. ws = new WebSocket('ws://19 ...

  9. websocket 更新点位 浏览器卡顿_我们来看看Swoole是如何实现WebSocket服务器及客户端的...

    php自学中心 2019-11-08 10:25:30 文章来自:laravel学院WebSocket 概述 在此之前,有必要对 WebSocket 的原理做简单的说明,WebSocket 复用了 H ...

最新文章

  1. Pyhton,OpenCV对象检测之——Haar级联人脸及眼睛检测
  2. android 帖子功能,anroid 各个功能的帖子 和代码片段
  3. 科学互驳:大脑细胞活到老,长到老?
  4. 惊呆了!B 站公告低级错误,将公司名写成“百度”
  5. 解决傲游浏览器没有兼容模式
  6. ssl双向认证_SSL握手协议不清楚?vTrus为你讲解其详细流程
  7. 网工面对HR应该提前做好哪些准备?
  8. django mysql 表单_Python Django 表单提交数据到mysql并展示
  9. 微信上传素材 java_微信素材上传(JAVA)
  10. 链接聚合是将一组物理接口_500字描述华为VLAN聚合工作原理 你看懂了吗?
  11. 各大厂面试高频的面试题新鲜出炉,你能答上几道?
  12. 矢量归一化_7. 从矢量观测到姿态观测
  13. Python语言认识和实用工具(1)
  14. 1.TCP/IP 详解卷1 --- 概述
  15. 190601每日一句
  16. 使用phpQuery 抓取HTML 页面内容
  17. 哈夫曼编码(Huffman Coding)多图详细解析
  18. 浅析内网沟通软件有什么特点
  19. elementui el-tab添加badge,以及实时更新标记值
  20. Vue-router的使用

热门文章

  1. 【移植Linux 3.4.2内核第一步】之简单修改
  2. Spring各jar包的作用(转载)
  3. 网络攻防 第四周学习总结
  4. There is no row in position 0
  5. lecture3-线性神经元和算法
  6. 可以让你少奋斗10年的工作经验
  7. [转] UML中关联、依赖、聚集等关系的异同
  8. 【数据结构与算法】【应用】字符串匹配
  9. pta - 1132 Cut Integer
  10. 请对比html与css的异同,css3与css2的区别是什么?