0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

go语言实现的简单im即时通信系统解析

Linux爱好者 来源:大呜 作者:大呜 2021-10-26 09:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

【导读】本文介绍了一个 go 语言实现的简单 im 即时通信系统。

简介

纯go实现的im即时通讯系统,各层可单独部署,之间通过rpc通讯,支持集群,github地址 https://github.com/Terry-Ye/im_api , 学习于goim, 总分三层,

comet(用户连接层),可以直接部署多个节点,每个节点保证serverId 唯一,在配置文件comet.toml

logic(业务逻辑层),无状态,各层通过rpc通讯,容易扩展,支持http接口来接收消息

job(任务推送层)通过redsi 订阅发布功能进行推送到comet层。

时序图

以下Comet 层,Logic 层,Job层都可以灵活扩展机器

特性

分布式,可拓扑的架构

支持单个,房间推送

心跳支持(gorilla/websocket内置)

基于redis 做消息推送

轻量级

持续迭代。。.

部署

安装

goget-ugithub.com/Terry-Ye/im
mv$GOPATH/src/github.com/Terry-Ye/im$GOPATH/src/im
cd$GOPATH/src/im
goget./...

golang.org 包拉不下来的情况,例

packagegolang.org/x/net/ipv4:unrecognizedimportpath"golang.org/x/net/ipv4"(httpsfetch:Gethttps://golang.org/x/net/ipv4?go-get=1:dialtcp216.239.37.1i/otimeout)

从github 拉下来,再移动位置

gitclonehttps://github.com/golang/net.git
mkdir-pgolang.org/x/

mvnet$GOPATH/src/golang.org/x/
  1. 部署im

安装comet、logic、job模块

cd$GOPATH/src/im/comet
goinstall
cd../logic/
goinstall
cd../job
goinstall

nohup$GOPATH/bin/logic-d$GOPATH/src/im/logic/2>&1>/data/log/im/logic.log&

nohup$GOPATH/bin/comet-d$GOPATH/src/im/comet/2>&1>/data/log/im/comet.log&

nohup$GOPATH/bin/job-d$GOPATH/src/im/job/2>&1>/data/log/im/job.log&
  1. im_api 是im系统中使用的接口,需要像demo那样整体跑起来需要完整的部署

部署注意事项

  1. 部署服务器注意防火墙是否开放对应的端口(本地不需要,具体需要的端口在各层的配置文件)

demo

聊天室:http://www.texixi.com:1999/

使用的包

  • log: github.com/sirupsen/logrus
  • rpc: github.com/smallnest/rpcx
  • websocket: github.com/gorilla/websocket
  • 配置文件:github.com/spf13/viper

后续计划

  1. 在线列表
  2. 支持wss
  3. 聊天机器人

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信系统
    +关注

    关注

    6

    文章

    1247

    浏览量

    54969
  • 聊天机器人
    +关注

    关注

    0

    文章

    348

    浏览量

    13036
  • go语言
    +关注

    关注

    1

    文章

    159

    浏览量

    9625

原文标题:支持分布式的 go 实现即时通讯系统

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    socket是什么

    特定的IP地址和端口上等待客户端连接,客户端则通过Socket连接到服务器程序并进行通信。通过Socket技术,可以实现不同操作系统和编程语言之间的
    发表于 12-03 08:27

    米尔 SECC 方案:国标充电桩多协议兼容的通信基础解析

    枪状态、通信阶段- ADC 状态采集:检测电气状态是否达标- 多接口通信模块:实现车辆、桩控系统与后台之间的联动- 基础安全保护:确保通信
    发表于 11-20 17:46

    常用Web 实时通信技术:原理+选型,一篇通关

    用的实时通信技术,从概念、原理特点、适用场景、对比选型进行详细解析。 一、WebSocket 1.1、核心概念 WebSocket 是 Web 端实时通信的 “基础设施”,通过 全双工长连接 和 轻量帧传输 ,解决了 HTTP
    的头像 发表于 10-27 17:19 494次阅读
    常用Web 实时<b class='flag-5'>通信</b>技术:原理+选型,一篇通关

    协议解析网关是什么?有什么功能?

    、OPCUA、HTTP等),并将其转换为目标系统或设备可识别的协议格式,从而实现跨协议的通信与数据交互。 简单来说,协议解析网关就像“翻译官
    的头像 发表于 08-13 14:04 595次阅读
    协议<b class='flag-5'>解析</b>网关是什么?有什么功能?

    即时通话软件音频传输质量测试方案介绍

    本套测试方案的核心目的是通过POLQA(Perceptual Objective Listening Quality Assessment)主观音质评价测试来反映即时通话软件在使用过程中的音频
    的头像 发表于 08-10 15:21 3410次阅读
    <b class='flag-5'>即时通</b>话软件音频传输质量测试方案介绍

    通用卫星通信模拟仿真系统全面解析

    通用卫星通信模拟仿真系统全面解析
    的头像 发表于 07-28 09:26 474次阅读
    通用卫星<b class='flag-5'>通信</b>模拟仿真<b class='flag-5'>系统</b>全面<b class='flag-5'>解析</b>

    基于瑞芯微RK3562 的四核 AR M Cortex-A53 + 单核 ARM Cortex-M0工业评估板——MQTT通信方案

    MQTT作为一种低开销,低带宽占用的即时通讯协议,可以极少的代码和带宽为联网设备提供实时可靠的消息服务,适用于硬件资源有限的设备及带宽有限的网络环境。我司提供的评估板文件系统已支持Mosquitto工具,本文mqtt_client案例采用Mosquitto工具演示MQTT
    的头像 发表于 06-05 15:00 1737次阅读
    基于瑞芯微RK3562 的四核 AR M Cortex-A53 + 单核 ARM Cortex-M0工业评估板——MQTT<b class='flag-5'>通信</b>方案

    鸿蒙5开发宝藏案例分享---一多开发实例(即时通讯)

    们准备好了超多实用开发案例!尤其是那个让无数人头疼的\"一次开发多端部署\",官方竟然悄悄塞了这么多实战技巧!(拍大腿) ?先上硬核案例:即时通讯应用的多端魔法? 官方这个即时通
    发表于 06-03 16:01

    单片机C语言实例(350+例)

    350+单片机C语言实例! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 05-22 21:47

    基于Verilog语言实现CRC校验

    CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
    的头像 发表于 03-24 10:36 2179次阅读
    基于Verilog<b class='flag-5'>语言实现</b>CRC校验

    ​VLM(视觉语言模型)​详细解析

    的详细解析: 1. 核心组成与工作原理 视觉编码器 :提取图像特征,常用CNN(如ResNet)或视觉Transformer(ViT)。 语言模型 :处理文本输入/输出,如GPT、BERT等,部分模型
    的头像 发表于 03-17 15:32 7577次阅读
    ​VLM(视觉<b class='flag-5'>语言</b>模型)​详细<b class='flag-5'>解析</b>

    PID控制算法的C语言实现:PID算法原理

    在工业应用中 PID 及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握 PID 算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研发问题了,而难能可贵
    发表于 02-26 15:24

    华为云 Flexus X 实例云服务器部署即时通IM 项目

    @TOC   写在前面 手里拿到了一台 华为云 Flexus X 实例 的云服务器,部署部署项目试试看看性能怎么样。正当华为云 828 上云活动,可领 8280 元的券,活动地址在这里:点我查看   让我们来看看干点什么呢?部署个实用的应用吧~ Flexus X 实例云服务器 介绍 首先,flexus 系列的产品不止有云服务器,还有如下一些产品: 1. Flexus L 实例的云服务器 2. Flexus X 实例的云服务器 3. Flexus 云数据库 RDS 4. Flexus 云容器实例 5. Flexus 数字人 6. Flexus 企业搜索服务 7. Fle
    的头像 发表于 02-07 10:15 691次阅读
    华为云 Flexus X 实例云服务器部署<b class='flag-5'>即时通</b>讯 <b class='flag-5'>IM</b> 项目

    基于FPGA实现图像直方图设计

    简单,单采用FPGA来实现直方图的统计就稍显麻烦。若使用Xilinx和Altera的FPGA芯片,可以使用HLS来进行图像的加速处理。但这暂时不是我的重点。 用C语言实现直方图统计:unsigned
    的头像 发表于 12-24 10:24 1198次阅读
    基于FPGA<b class='flag-5'>实现</b>图像直方图设计

    AUTOSAR通信协议解析 如何实现AUTOSAR通信

    通信协议栈是一个复杂的系统,它涵盖了多种通信方式和模块,以实现车内ECU之间的高效、可靠的数据交换。以下是对AUTOSAR通信协议的
    的头像 发表于 12-17 14:54 3951次阅读