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

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

3天内不再提示

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

马哥Linux运维 来源:Go开发大全 作者:Go开发大全 2021-10-20 16:02 次阅读

本文介绍了一个 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 做消息推送

轻量级

持续迭代。。.

部署

  1. 安装
    
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. 聊天机器人

原文来自:www.ancii.com/awugjp68e/

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

    关注

    6

    文章

    1066

    浏览量

    53048
  • 聊天机器人
    +关注

    关注

    0

    文章

    272

    浏览量

    12102
  • go语言
    +关注

    关注

    1

    文章

    156

    浏览量

    8919

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

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言实现Web参数传递

    电子发烧友网站提供《C语言实现Web参数传递.docx》资料免费下载
    发表于 03-24 09:14 0次下载

    ADUC7061如何使用C语言实现EEPROM功能?

    我使用ADUC7061做的信号采集,现在客户需要实现EEPROM功能来保存3-5个数据,请问如何使用C语言实现?不使用外部EEPROM 专用IC。
    发表于 01-12 06:56

    使用go语言实现一个grpc拦截器

    在开发grpc服务时,我们经常会遇到一些通用的需求,比如:日志、链路追踪、鉴权等。这些需求可以通过grpc拦截器来实现。本文使用go语言实现一个 grpc一元模式(Unary)拦截器
    的头像 发表于 12-18 10:13 225次阅读
    使用<b class='flag-5'>go</b><b class='flag-5'>语言实现</b>一个grpc拦截器

    Go编程语言-你应该知道的一切

    Go 编程语言的故事始于 Google,当时三位工程师 Robert Griesemer、Rob Pike 和 Ken Thompson 对 C++ 的复杂性以及缺乏提供高效编译和执行的简单
    的头像 发表于 12-11 17:37 290次阅读

    C语言实用程序150例

    电子发烧友网站提供《C语言实用程序150例.rar》资料免费下载
    发表于 11-20 11:37 1次下载
    C<b class='flag-5'>语言实</b>用程序150例

    基于VHDL语言实现远程防盗报警设计

    电子发烧友网站提供《基于VHDL语言实现远程防盗报警设计.pdf》资料免费下载
    发表于 11-08 14:33 0次下载
    基于VHDL<b class='flag-5'>语言实现</b>远程防盗报警设计

    Go语言比Python强多少

    1.都说Go语言性能非常强大,那么到底比Python强多少? 为了比较Go语言和Python语言在单线程性能上的差距,我们可以做一个
    的头像 发表于 11-02 14:05 273次阅读
    <b class='flag-5'>Go</b><b class='flag-5'>语言</b>比Python强多少

    基于XMPP协议的Android即时通信系统设计

    电子发烧友网站提供《基于XMPP协议的Android即时通信系统设计.pdf》资料免费下载
    发表于 10-27 10:40 0次下载
    基于XMPP协议的Android<b class='flag-5'>即时通信系统</b>设计

    基于NAT穿透P2P即时通系统的设计与实现

    电子发烧友网站提供《基于NAT穿透P2P即时通系统的设计与实现.pdf》资料免费下载
    发表于 10-27 09:44 0次下载
    基于NAT穿透P2P<b class='flag-5'>即时通</b>讯<b class='flag-5'>系统</b>的设计与<b class='flag-5'>实现</b>

    一个使用Java语言实现的向量化BLAS库VectorBLAS

    VectorBLAS是一个使用Java语言实现的向量化BLAS高性能库,目前已在openEuler社区开源。
    的头像 发表于 08-16 10:40 561次阅读
    一个使用Java<b class='flag-5'>语言实现</b>的向量化BLAS库VectorBLAS

    介绍一款轻量级的RISC-V解释型模拟器

    XEMU 是一款轻量级的 RISC-V 解释型模拟器,基于 C 语言实现,支持 RV32IM 指令集,支持简单外设模拟
    的头像 发表于 07-22 14:25 1303次阅读
    介绍一款轻量级的RISC-V解释型模拟器

    Go语言简介和安装方法

    Go 又称 Golang ,是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言Go 语言语法与
    发表于 07-19 16:33 408次阅读

    即时通系统为什么选择 GaussDB(for Redis)?

    每当网络上爆出热点新闻,混迹于各个社交媒体的小伙伴们全都开启了讨论模式。一条消息的产生是如何在群聊中传递的呢?让我们一起来探索即时通系统(IM)的原理。 IM
    的头像 发表于 06-27 23:07 385次阅读
    <b class='flag-5'>即时通</b>讯<b class='flag-5'>系统</b>为什么选择 GaussDB(for Redis)?

    浅谈SylixOS 实时操作系统Go语言应用

    Go 语言是一门编译型语言,继承了编译型语言的高性能、类型安全以及对计算机底层的高可控性等特点,其运行性能可与C/C++媲美。Go
    发表于 06-08 10:41 774次阅读
    浅谈SylixOS 实时操作<b class='flag-5'>系统</b>中<b class='flag-5'>Go</b><b class='flag-5'>语言</b>应用

    用C语言实现简单工厂模式

    在我们的印象中,设计模式是由面向对象的语言(C++、JAVA)才能完成的,而 C 语言是面向过程的语言,不能实现设计模式。
    发表于 06-05 11:28 280次阅读
    用C<b class='flag-5'>语言实现</b><b class='flag-5'>简单</b>工厂模式