自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (4)
  • 收藏
  • 关注

原创 基于Tars高并发IM系统的设计与实现-实战篇6

客户端采用跨平台SDK+原生UI的方案。此处重点介绍SDK实现,UI用户可以根据自己需求进行开发。

2023-08-10 08:45:53 111

原创 基于Tars高并发IM系统的设计与实现-实战篇5

群聊服务既可以接受来自BrokerServer的用户请求,也需要接收来自其他服务的RPC请求;所以本服务提供两套RPC接口:通用RPC接口和专用RPC接口。

2023-08-10 08:45:17 124

原创 基于Tars高并发IM系统的设计与实现-实战篇4

要完成以上业务,需要通过不同的微服务模块来进行功能实现。

2023-07-24 21:24:16 160

原创 基于Tars高并发IM系统的设计与实现-实战篇3

采用 tars2cpp 工具自动生成 c++文件:/usr/local/tars/cpp/tools/tars2cpp AuthServant.tars 会生成 AuthServant.h 文件,里面包含客户端和服务端的代码( 编译时会自动处理)。要满足高可用,高并发,低延时三大指标,需要在架构设计上能满足要求,Tars高性能框架能够完全满足高可用、高并发两项指标;一个完整高性能的IM服务设计在满足三大指标(高可用,高并发,低延时)、解决五大难题的同时,也要满足基本的业务功能。进入代码目录,首先做。

2023-07-20 13:49:55 144

原创 基于Tars高并发IM系统的设计与实现-实战篇2

源码编译过程需要安装:gcc, glibc, bison, flex, cmake下载源码编译安装错误处理如果cmake编译过程中遇到如下错误,directory.directory.到根目录执行如下命令:到servant目录独立拉TarsProtocol后改名为protocol:至此, Tars Cpp的编译环境已经完成;

2023-07-20 13:48:16 141

原创 基于Tars高并发IM系统的设计与实现-实战篇1

Tars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。Tars是将腾讯内部使用的微服务架构TAF(Total Application Framework)多年的实践成果总结而成的开源项目。Tars这个名字来自《星际穿越》电影中机器人Tars, 电影中Tars有着非常友好的交互方式,任何初次接触它的人都可以轻松的和它进行交流,同时能在外太空、外星等复杂地形上,超预期的高效率的完成托付的所有任务。

2023-07-11 19:05:42 173

原创 基于Tars高并发IM系统的设计与实现--进阶篇2

超过10000人的群都可以视为超大群;超大群消息量巨大,根据消息优先级进行处理,普通消息允许丢失;正常群聊也就几十人到几百人(微信限制最大500人)群聊中的消息要进行及时扩散,前文中描述的群聊消息转发模式在正常群聊情况下没什么问题;如果超大群也采用这种模式,系统的性能和消息的延时将会出现一些问题;

2023-07-05 10:27:10 132

原创 基于Tars高并发IM系统的设计与实现--进阶篇1

基于Tars高并发IM系统的设计与实现–进阶篇1。

2023-07-03 15:44:27 116

原创 OMTP协议说明文档

OMTP(Open Message Transport Protocol)是一套自定义IM消息传输协议。它工作在TCP/IP协议族上基于客户端-服务器即时通讯系统设计的消息通讯协议,数据编码方式为基于Tars/PB的二进制类型。

2023-07-02 10:59:47 436

原创 基于Tars高并发IM系统的设计与实现-基础篇2

分为服务高可用与存储高可用。

2023-07-02 10:55:29 279

原创 基于Tars高并发IM系统的设计与实现-基础篇1

InstantMessaging 即时通讯、实时传讯,能以最快的速度把信息从一方传递到另外一方。即时通信系统(IM,Instant Messenger)是一款跨平台(Linux Server,Windows Server),可定制的 P2P 即时通信系统(集成多人视频会议功能),为各行业门户网站和企事业单位提供“一站式”定制解决方案,打造一个稳定,安全,高效,可扩展的即时通信系统.

2023-07-01 11:50:20 360

原创 IM MQTT 消息payload不同数据格式对比

文本长度json压缩前zip压缩后ProtoBuffer112312770312913476312132161604024024718945255264204502702752225528528223460

2022-11-26 10:30:48 533 2

原创 swift3.0 中字符串截取

swift3.0 中不能直接使用下标数字进行字符串解决,只能使用String.Index来做位置索引,要想实现截取功能首先得获取到String.Index;下面两段代码获取开头可结尾,获取中间部分参数用RangeIndex>即可;获取结尾两个字符子串:let sessionId = "this is a test"    let index

2016-07-31 12:29:13 17389 1

原创 swift3.0 中如何在主线程中刷新UI

类似OC 中的GCD,只是调用方法不同,更方便,如下代码,功能为刷新tableview; DispatchQueue.main.async(execute: {    self.listTableview.reloadData()})

2016-07-31 12:18:25 18090 1

原创 swift3.0 中NSNotification 的使用

swift3.0 有很大变化,其中之一就是NSNotification使用跟原来不一样,以前NSNotification name是String;3.0中定义了一个类型NSNotification.name;使用时最好定义一个NSNotification.name 常量方便使用;直接上代码:/通知名称常量let NotifyChatMsgRecv = NSNotificatio

2016-07-29 08:56:25 9112 2

原创 iOS录音中断问题解决

iOS录音过程中,有时候会有录音中断问题,本来录50秒,很可能后面10秒就录不上,一般都是程序逻辑出现问题;录制语音前需要对录音设备属性Category设置如下:[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil];或[AVAudioSession sharedInsta

2016-07-29 08:45:35 5853

转载 centos mysql占用磁盘空间过大解决方法

安装了mysql以后,过一段时间发现磁盘空间不足了,查一下,发现是  mysql-bin.000001、  mysql-bin .000002等文件占用了空间,那么这些文件是干吗的?这是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。 这样做主要有以下两个目的:1:

2016-06-13 10:52:10 6803

原创 Centos 7 安装PHP 7 --skip-broken 问题解决

安装步骤:1.卸载老版本php:yum remove php* php-common2.rpm 安装 Php7相应的 yum源:  rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm     3.安装新版本:yum install ph

2016-04-28 16:50:37 16395 1

转载 如何计算UDP/TCP检验和checksum

如何计算UDP/TCP检验和checksum一、下面的图是一个UDP的检验和所需要用到的所有信息,包括三个部分:1.UDP伪首部2.UDP首部3.UDP的数据部分(切记不要遗漏该部分,否则就~吐血了~)首先解释下伪首部的概念,伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯为了做校验用的。还有一个概念十分重要,那就是1

2016-04-11 17:40:46 41798 1

原创 最简单的iOS真机抓包方式

准备生产资料:1.mac电脑2.iPhone手机或者iPad3.安装wireshark抓包步骤:1.运行命令rvictl -s [UDID],在电脑上映射一个虚拟网络端口;rvictl -s  a55f325b5f283d93875397b54d64f76b7adxxxx2.运行wireshark;捕获rvi0接口内容即可;

2016-03-02 15:02:27 1908

原创 MQTT libmosquitto源码分析

概述libmosquitto作为mosquitto开源代码的一部分,主要用来实现MQTT协议栈和数据包通讯功能。本文主要描述libmosquitto部分代码架构,实现原理,部分重要代码解析;另外还有针对该代码库的不足和问题分析。 阅读条件阅读此文,需要了解MQTT协议结构和部分实现。MQTT简述MQTT(Message Queuing Tel

2016-03-02 14:44:48 17621 2

原创 iOS 如何查crash bug

1.准备工作:     1).打包时build settings需要选择包含dsym          2).保存ipa,dsym          3). ipa实际上是zip文件,将其解压缩到目录Payload中     4).将dSYM文件copy到Payload,该目录下有app和dSYM     2.堆栈信息

2016-02-14 16:45:07 1278

原创 图片格式JPEG,WEBP压缩,微信图片格式对比

数据对比JPEG可以设置各种压缩比,webp也可以设置各种压缩比,根据不同压缩比进行数据比对,同时也对微信非原图图进行比对,数据如下:比例\格式原图尺寸webp-06JPEG--05JPEG--04JPEG---03JPEG---02JPEG---01png压缩比10.60.50.40.

2016-01-28 09:44:01 4901

原创 IM MQTT消息payload数据格式 json,zip,protbuffer 对比

1.文本聊天内容传输时,超过280字节,zip压缩比较有意义;2.少量数据传输(<420字节),protbuffer压缩比更高,比较有优势;3.内容越多,文本传输量越大,zip压缩优势越明显;4.建议对内容超过一定数量的信息可以再进行zip压缩,以便缩小传输量;(参见600汉字,1000汉字聊天内容对比)

2016-01-21 13:57:43 10992 1

原创 Android Tab(TabLayout+Fragment)

layout文件:LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    xmlns:app="http://schemas.and

2016-01-21 11:06:20 856

原创 ios9设置bitcode AMR编译

修改如下脚本: CFLAGS="-isysroot $SDKROOT -arch $arch $IOSV -isystem $SDKROOT/usr/include -fembed-bitcode"

2015-10-14 11:49:12 1123 1

翻译 Qt 5.3将支持Windows 8/RT (Modern UI), Windows Phone 8

What is new in Qt 5.3Support for New PlatformsWindows Runtime platforms: Windows 8/RT (Modern UI), Windows Phone 8原文:http://qt-project.org/wiki/New-Features-in-Qt-5.3

2014-02-11 12:36:36 1220

原创 ubuntu 下用qt必要组件

libx11-dev libxext-dev libxtst-dev

2013-11-28 13:15:37 1648

原创 Mingw下编译PJSIP时报错undefined reference to `pjmedia_format_init_audio'问题解决

在mingw下编译PJSIP时会报如下类似错误:/pjproject-2.1.0/pjmedia/lib/libpjmedia-audiodev-i686-pc-mingw32.a(wmme_dev.o):wmme_dev.c:(.text+0xd61): undefined reference to `pjmedia_format_init_audio'此问题是编译链接pjsip-a

2013-11-15 13:54:45 1952

原创 QT可以播放gif的实例

等待gif的显示:  #ifndef CLABELWAIT_H#define CLABELWAIT_H#include class CLabelWait : public QLabel{ Q_OBJECTpublic: explicit CLabelWait(QWidget *parent = 0); void SetIma

2013-11-01 10:37:29 1056

转载 NSIS安装时自动卸载老版本

Section "" SecUninstallPrevious    Call UninstallPreviousSectionEndFunction UninstallPrevious    ; Check for uninstaller.    ReadRegStr $R0 HKLM "${PRODUCT_UNINST_KEY}" "InstallDir"    $

2013-10-23 16:12:37 3126

原创 QT下自定义QQ聊天窗口tab控件

1.用继承pushbutton派生类来实现tab按钮,里面加一个QPushbutton关闭按钮;(自定义类:CCustomTabButton)2.多个tab按钮用QHboxLayout做容器;3.用QStackLayout做page容易,保存tab页的widget;4.从QWidget继承类CCustomTabWidget组合tabbar和page5.用qss渲染tarbar的效果

2013-10-12 09:28:08 2595

原创 继承QWidget的派生类控件不能设置QSS问题解决

自定义控件时基类用了QWidget,发现qss设置不起作用,需要重装其paintEvent函数即可;如下代码:void CCustomWidget::paintEvent(QPaintEvent*){ QStyleOption opt; opt.init(this); QPainter p(this); style()->drawPrimit

2013-10-09 11:56:22 1890

原创 Qt程序crash信息的捕捉与跟踪

Qt程序crash信息的捕捉与跟踪在用qt编写程序时经常会遇到崩溃问题,如果抓取不到crash堆栈信息就会对崩溃问题束手无策,只能对其进行复现,推断。一般解决crash问题时有如下步骤:1.从软件发行版本能跟获得debug信息,在不同平台下有不同的表现方式,目前只讨论qt-mingw方式,这种方式可以利用修改工程文件配置项编译时讲debug信息加入应用程序当中;当然这会增加发行版应

2013-09-30 11:22:51 15922 18

原创 qt下编译警告unused parameter 的取消

编译中出现以下警告:警告:unused parameter 'nCurrSize' [-Wunused-parameter]原因是由于函数参数未使用,这在程序当中有时候很正常;所以个人认为此警告意义不大,可以取消; 取消方法: 在pro工程文件最后加入如下代码:QMAKE_CXXFLAGS +=  -Wno-unused-parameter

2013-08-13 16:05:23 4124

原创 qt5.1编译 两个问题解决

将qt4.x项目用5.1编译时,可能会遇到以下两个问题:1.qwebview问题,比如qwebelement,qwebframe找不到;解决方法:在pro文件中增加:webkitwidgets 如:QT += widgets webkitwidgets 2.QSound找不到,解决方法:在pro文件中增加:multimedia如:QT += widgets webkitwidg

2013-08-12 18:01:06 958

原创 QT中|Qt::Tool类型窗口自动退出消息循环问题解决

为application 设置setQuitOnLastWindowClosed属性,确实为true;将其显示为false;退出该应该程序不能调用QDialog的close消息槽,只能调用qApp->exit();a.setQuitOnLastWindowClosed(false);

2013-04-08 14:36:48 1861

原创 QMutex“A mutex must be unlocked in the same thread that locked it”解决

多线程时出现如下警告信息:A mutex must be unlocked in the same thread that locked it; 原因可能有二:1.创建QMutex不在当前线程;2.QWaitCondition::wait 调用前没有调用QMutex::lock; 解决方法:1.在run函数中创建QMutex; ...

2013-03-10 23:29:08 1341

原创 设计模式单例使用注意

最近在将微群产品有单用户改成多用户过程中发现一些关于单例得问题,由于切换用户,该用户数据都得重新初始化;对于某些数据进行初始化最彻底得方式就是重建其实例,但对于单例类型得就不简单了,需要重写一些初始化方法。所以对于类似跟账户有关功能模块时,要慎用单例模式,可以采用其他设计模式来代替。

2013-01-25 11:26:28 373

原创 IOS下横屏方法,4.x,5.x 6.x童叟无欺

基于UITabBarController的应用,要增加支持横屏得相关函数,具体如下;1.类别化UITabBarController@interface UITabBarController(Rotation)- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrie

2013-01-16 10:45:00 494

libmosquitto 源码分析

MQTT, 开源代码库mosquitto,源码分析,从架构,流程,源码进行分析,并指出其中不足

2018-03-16

Android Tab(TabLayout+Fragment)实现源码

Android Tab(TabLayout+Fragment)实现源码

2016-01-21

QT下实现类似QQ聊天窗口tab控件

QT下实现类似QQ聊天窗口tab控件 ,包含自定义控件CCustomTabWidget 及使用范例程序

2013-10-12

Qt程序crash信息的捕捉与跟踪Demo

在用qt编写程序时经常会遇到崩溃问题,如果抓取不到crash堆栈信息就会对崩溃问题束手无策,只能对其进行复现,推断。 该程序展示如何获取crash堆栈信息

2013-09-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除