FishChat

分布式可伸缩 IM 服务器
授权协议 Apache
开发语言 Google Go
所属分类 应用工具、 IM/聊天/语音工具
软件类型 开源软件
地区 国产
投 递 者 蒋默
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

FishChat(鱼传——鱼传尺素),是一款纯 golang 编写优秀的即时通讯软件(IM), 它集合了市面上已有产品的优点, 并具备 智能硬件网关管理(学习QQ物联思想, 构思中)。

FishChat Android 客户端见 https://github.com/oikomi/FishChatAndroid (紧张开发中)

系统架构

关键服务器详解

gateway

gateway server主要是接受client请求,进行通用的功能设置,目前这块只做了分配msg_server的功能,后面可根据需要进行扩展

在gateway server的配置文件中最重要的是配置msg_server列表

"MsgServerList"      : [
        "192.168.159.169:19000",
        "192.168.159.169:19001"
    ],

msg_server

msg_server是消息的主体,维护着客户端连接和keeplive,同时要注意router、manager和monitor都订阅了msg_server的channel

    SYSCTRL_CLIENT_STATUS = "/sysctrl/client-status"
    SYSCTRL_TOPIC_STATUS  = "/sysctrl/topic-status"
    SYSCTRL_TOPIC_SYNC    = "/sysctrl/topic-sync"
    SYSCTRL_SEND          = "/sysctrl/send"
    SYSCTRL_MONITOR       = "/sysctrl/monitor"

这些channel保证了msg_server在事件触发时会广播通知后面的router、manager和monitor服务

router

router顾名思义是做了msg_server之间的消息转发

manager

manager主要是管理client信息存储、离线消息存储等等,通过它和redis联系

monitor

monitor主要是收集监控各服务器状态信息,目前monitor是可选项,可按需要启动它

部署

FishChatServer采用分布式可伸缩部署方式。如果没有多机条件,可以单机部署:

建议:单机测试部署

  • gateway一台

  • msg_server两台

  • router一台

  • manager一台

  • monitor一台

./gateway

./msg_server -conf_file=msg_server.19001.json

./msg_server -conf_file=msg_server.19000.json

./router

./manager

./monitor

按上面的默认启动方式,查看系统的监听端口如下

当然你可以修改各文件夹下面的json配置文件修改配置参数

 相关资料
  • 假设某个负载均衡器(希望将来不会出现一个故障点,但我不知道如何实现这一点,或者可能只是转移到AWS)正在将SocketIO连接从终端客户机分配到聊天服务器。不同的用户连接到不同的服务器可能在同一个房间,因此需要将消息发送到其他服务器。 我如何可行地实现这样的东西?希望不要太复杂。 问题:(1)如果所有服务器都需要处理所有的消息,因为用户可以通过任何服务器登录,这是否可以扩展?(2)服务器之间是否需

  • 问题内容: 您将使用哪种分布式锁定服务? 要求是: 可以从不同的进程/机器看到的互斥(锁定) 锁定…释放语义 超时后自动释放锁-如果锁持有人死亡,它将在X秒后自动释放 Java实现 很高兴拥有:.Net实现 如果免费:死锁检测/缓解 易于部署,请参阅下面的注释。 我对诸如“可以通过数据库完成”或“可以通过JavaSpaces完成”之类的答案不感兴趣-我知道。我对现成的,现成的,经过验证的实现感兴趣

  • 链接 Web API Controllers 动态WebApi层 集成OData 集成Swagger UI ASPNET Core 集成OData

  • 我试图从使用逻辑应用程序的服务总线队列读取消息。我没有找到任何关于逻辑应用程序如何根据队列中的消息数量进行缩放的留档。任何帮助或指针非常感谢。

  • 我有500MB的数据要推送到云搜索。 以下是我尝试过的选项: 直接从控制台上传: 试图上传文件时,有5 MB的限制。 然后将文件上传到S3并选择S3选项, 上传到S3并在控制台中给出S3 url: 失败并要求尝试命令行。 尝试使用命令行 aws cloudsearchdomain上载文档--endpointurlhttp://endpoint--内容类型application/json--文档s3

  • 我有两个微服务和调用来更新数据,然后插入另一个数据,但让我们考虑一下 失败,然后我们需要回滚由 更新的数据,否则我们将处于不一致的状态。 我也经历了佐贺patterns.will它满足了这种矛盾 谁能为此提出更好的解决方案?