Tim

分布式聊天服务器
授权协议 Apache
开发语言 Google Go
所属分类 服务器软件、 XMPP即时通讯
软件类型 开源软件
地区 国产
投 递 者 何麻雀
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Tim是一个分布式聊天服务器,采用go语言开发,有很好的并发支持与良好的性能。

1.支持im的基本功能。
2.支持群聊。
3.支持用户状态信息推送,"在线","离开"等。
4.支持消息回执.消息不丢失。
5.支持离线信息,聊天信息等存储与拉取。
6.通过协议拓展,可以支持视频,音频等通讯。
7.支持心跳检测异常断开的客户端,检测客户端验证超时等。
8.支持可配置的同一账号多客户端同时登陆。
9.可以配置关联其他数据库用户系统,tim可以独立于业务之外。
10.支持无数据库模式,此模式无法保存数据。
11.支持自定义消息类型,如发送位置,分享购物信息等。
12.支持分布式部署,服务器横向拓展。

目前实现的客户端有java,golang,Obj-C,由于使用thrift作为传输协议,开发相对简单许多,大部分只是简单接口调用即可,协议拓展也相对容易许多。

实际应用场景:已在公司上线使用,原使用阿里悟空即时通讯,由于需求的增加,及部分消息类型需要定制,后来改用了tim即时通讯,基本可以满足当前以及以后的拓展需求。

支持分布式部署是tim的重要功能也是许多使用im的开发者关心的问题。经过一段时间的思考,决定采用最简单有效的方式:tim的集群非常简单,只需额外提供一个redis服务即可,每个tim节点会从redis服务上读取其他tim节点的信息,使用thrift协议在服务器之间进行信息交互。tim与redis的交换也非常简单,存,读,删,除redis命令以外如果还有逻辑,则采用lua完成。集群的数量没有限制,理论上可以无限的扩展。

tim服务器启动时需要指定配置文件
如 tim  f  tim.xml  d  debug   c cluster.xml   
f后跟基本配置文件tim.xml    d后跟日志打印级别debug,info,warn,error等,可参考github.com/donnie4w/go-logger项目     c后跟集群文件cluster.xml

protocols文件夹中有几门语言的thrift协议,通过这协议可与服务器通信,通讯流程请在doc中查阅.

tim即时通讯项目虽然已经投入使用,但是目前的改动还是比较大,项目尚在不断完善当中!有任何建议或意见请随时email给我:donnie4w@gmail.com .谢谢!

体验demo
另外tim提供了windows环境的两个可执行文件,有兴趣的人可以玩一下,server.exe与client.exe 。启动请看命令说明,主要是用户登录发送信息,状态信息等简单的体验。没有上下线的通知是由于用户关系没有建立。

  • 没什么可说的,想说的都写在注释里了,重要的事情说三遍:看注释,看注释,看注释 定时器的.c文件: /***************************************************************************** TIM1,TIM2,TIM3,TIM4,TIM5,TIM8输出4路PWM配置 要用TIM2-TIM5记得注销TIM1,TIM8 要用TIM1,T

  • 通用定时器包含一个 16 位或 32 位自动重载计数器(CNT),该计数器由可编程预分频器(PSC) 驱动。 定 时 器 相 关 的 库 函 数 主 要 集 中 在 HAL 库 文 件 stm32f4xx_hal_tim.h 和stm32f4xx_hal_tim.c 文件中。 +++++++++++++++++++++++++++++++++++++++++++++++ TIM3 时钟使能。 HA

  • 1、HAL_StatusTypeDef HAL_TIM_Base_Init (TIM_HandleTypeDef * htim) 这个函数属于定时器使用基本的定时功能的初始化函数,它的输入参数为自定义的定时器指针。 TIM_HandleTypeDef TIM3_Handler; //定时器句柄 void TIM3_Init(u16 arr,u16 psc) { TIM3_H

  • 有个问题咨询大佬们:设置了STM32F103R8T6 的定时器1 为比较输出  产生PWM ,现在设置好后,在定时器初始化函数中一开起定时器1就一直进入TIM1_CC_IRQHandler中断中,利用串口打印一直在这个中断里 ,没有进入while。关闭了TIM1通道也没有用,不知道为何?烦请大佬们看下问题原因在哪里 函数源代码如下: 定时器初始化函数: void TIM1_Int_Init(voi

  • 前言:大家学生平时使用STM32F103系列的单片机比较多,我发布了一个串口2和串口3的帖子https://blog.csdn.net/weixin_41094315/article/details/80143240深受大家欢迎。 为了方便大家使用,本帖子贴出来了高级定时器TIM1和TIM8,普通定时器TIM2~TIM5,低级定时器TIM6和TIM7共8个定时器的库函数初始化代码,方便大家使用,还

  • 简介 本文主要介绍如何快速地将腾讯云 IM SDK 集成到您的 Web 项目中。 腾讯云即时通信IM SDK API 文档 示例demo下载 tim-js-sdk 功能扩展 (好友接口) 准备工作 在腾讯云官网上创建应用,获取到相应的SDKAppID和相应的秘钥信息 安装sdk 集成 SDK // IM Web SDK // 从v2.11.2起,SDK 支持了 WebSocket,推荐接入;v2.

  • 1、初始化TIM基本计数器参数 void MX_TIM2_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig= {0}; TIM_MasterConfigTypeDef sMasterConfig= {0}; htim2.Instance=TIM2; htim2.Init.Prescaler= 36000-1; htim2.Init.Cou

  • 硬件:stm32f4xx 软件:keil5(HAL库) 1.TIM中断(TIM3) 首先先把TIM初始化,官方给的初始化函数是HAL_TIM_Base_Init(TIM_HandleTypeDef *htim),也就意味着我们要首先初始化好TIM_HandleTypeDef这个结构体。所以我们先写一个函数来构建句柄。 TIM_HandleTypeDef TIM3_Handler; void

 相关资料
  • 8.10. 示例: 聊天服务 我们用一个聊天服务器来终结本章节的内容,这个程序可以让一些用户通过服务器向其它所有用户广播文本消息。这个程序中有四种goroutine。main和broadcaster各自是一个goroutine实例,每一个客户端的连接都会有一个handleConn和clientWriter的goroutine。broadcaster是select用法的不错的样例,因为它需要处理三种

  • 主要内容:服务端程序,客户端程序本节将带领大家结合咱们前面所学的知识开发一个聊天的示例程序,它可以在几个用户之间相互广播文本消息。 服务端程序 服务端程序中包含 4 个 goroutine,分别是一个主 goroutine 和广播(broadcaster)goroutine,每一个连接里面又包含一个连接处理(handleConn)goroutine 和一个客户写入(clientwriter)goroutine。 广播器(broa

  • 问题内容: 我正在尝试使用Redis Cookbook示例: 我在这里取得了成功,但从未得到“消息”。 我的客户端index.htm是这个 客户如何发布到特定的Redis“聊天”频道。 问题答案: 如果您在node.js程序中使用Redis发布/订阅功能,则应使用一个Redis客户端连接来监听某个频道,使用另一个Redis客户端连接来发送常规命令和/或将消息发布到您的频道。从node_redis文

  • 我正在学习如何与gRPC建立聊天服务。我注意到,大多数示例都将订阅者的所有连接存储到一个列表数据结构中。当聊天室收到新消息时,服务器将循环浏览该列表并发送新消息。 将订阅者存储在源代码的可变订阅者中。 我的问题是,当订阅者数量增加并将所有订阅者存储在HashMap中似乎是个坏主意,因为这会消耗太多内存?我尝试将这些连接存储在Redis中,但由于连接不可序列化,这可能是不可能的。 我的想法是在Kub

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

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

  • 我正在使用PHP,MySql和Node.js(socket.io实时聊天)像facebook这样的聊天应用程序。问题是当20个人开始聊天时,我的服务器负载会上升到10-15。我只是在发送方插入消息,并向接收方发送消息ID,接收方从数据库检索消息信息。我有一个Centos服务器有4个物理和4个逻辑核心(共8个核心)和16GB内存。我的网站是在zencart中构建的,当我在静态页面上按f5 1分钟时,

  • 我需要在netty中有一个客户机/服务器通信,用于我的项目目的之一。所以我刚开始用一个handsOn来改进,我正在学习netty,我是一个初学者。 我尝试了一个简单的客户端服务器与Netty聊天。 客户端和服务器正在初始化,我可以看到服务器能够获得用于建立连接的客户端管道,但是当客户端发送消息时,它没有进入ServerAdapterHandler的messageReceived部分。下面是我的源代