经验总结
文章平均质量分 78
四分之一炷香
毕业于中央民族大学计算机专业
先后供职国内外多家公司,有丰富的软件研发经验。
从事IM领域架构设计研发十余年,先后领衔多个IM通讯系统设计与研发。
展开
-
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 · 1955 阅读 · 0 评论 -
qjson编译方法
网上有人总结过编译方法,本人参考其方法,无论如何也不能编译成功,只能自己解决问题。经过查看相关资料,已经解决QJson编译问题,现总结如下,给后来者以指导。 qjson是qt下第三方开源库,由于没有pro文件只能用cmake方式编译,如果没有特殊说明,按照readme说明进行编译,在windows下会有问题。我机器上面安装了vs2010和qt mingw两个编译环境;cmake缺省原创 2013-01-09 20:37:29 · 5560 阅读 · 0 评论 -
基于Tars高并发IM系统的设计与实现-实战篇6
客户端采用跨平台SDK+原生UI的方案。此处重点介绍SDK实现,UI用户可以根据自己需求进行开发。原创 2023-08-10 08:45:53 · 112 阅读 · 0 评论 -
基于Tars高并发IM系统的设计与实现-实战篇5
群聊服务既可以接受来自BrokerServer的用户请求,也需要接收来自其他服务的RPC请求;所以本服务提供两套RPC接口:通用RPC接口和专用RPC接口。原创 2023-08-10 08:45:17 · 124 阅读 · 0 评论 -
基于Tars高并发IM系统的设计与实现-实战篇4
要完成以上业务,需要通过不同的微服务模块来进行功能实现。原创 2023-07-24 21:24:16 · 162 阅读 · 0 评论 -
基于Tars高并发IM系统的设计与实现-实战篇3
采用 tars2cpp 工具自动生成 c++文件:/usr/local/tars/cpp/tools/tars2cpp AuthServant.tars 会生成 AuthServant.h 文件,里面包含客户端和服务端的代码( 编译时会自动处理)。要满足高可用,高并发,低延时三大指标,需要在架构设计上能满足要求,Tars高性能框架能够完全满足高可用、高并发两项指标;一个完整高性能的IM服务设计在满足三大指标(高可用,高并发,低延时)、解决五大难题的同时,也要满足基本的业务功能。进入代码目录,首先做。原创 2023-07-20 13:49:55 · 146 阅读 · 0 评论 -
基于Tars高并发IM系统的设计与实现-实战篇2
源码编译过程需要安装:gcc, glibc, bison, flex, cmake下载源码编译安装错误处理如果cmake编译过程中遇到如下错误,directory.directory.到根目录执行如下命令:到servant目录独立拉TarsProtocol后改名为protocol:至此, Tars Cpp的编译环境已经完成;原创 2023-07-20 13:48:16 · 147 阅读 · 0 评论 -
基于Tars高并发IM系统的设计与实现-实战篇1
Tars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。Tars是将腾讯内部使用的微服务架构TAF(Total Application Framework)多年的实践成果总结而成的开源项目。Tars这个名字来自《星际穿越》电影中机器人Tars, 电影中Tars有着非常友好的交互方式,任何初次接触它的人都可以轻松的和它进行交流,同时能在外太空、外星等复杂地形上,超预期的高效率的完成托付的所有任务。原创 2023-07-11 19:05:42 · 178 阅读 · 0 评论 -
基于Tars高并发IM系统的设计与实现--进阶篇2
超过10000人的群都可以视为超大群;超大群消息量巨大,根据消息优先级进行处理,普通消息允许丢失;正常群聊也就几十人到几百人(微信限制最大500人)群聊中的消息要进行及时扩散,前文中描述的群聊消息转发模式在正常群聊情况下没什么问题;如果超大群也采用这种模式,系统的性能和消息的延时将会出现一些问题;原创 2023-07-05 10:27:10 · 135 阅读 · 0 评论 -
基于Tars高并发IM系统的设计与实现--进阶篇1
基于Tars高并发IM系统的设计与实现–进阶篇1。原创 2023-07-03 15:44:27 · 116 阅读 · 0 评论 -
基于Tars高并发IM系统的设计与实现-基础篇2
分为服务高可用与存储高可用。原创 2023-07-02 10:55:29 · 282 阅读 · 0 评论 -
OMTP协议说明文档
OMTP(Open Message Transport Protocol)是一套自定义IM消息传输协议。它工作在TCP/IP协议族上基于客户端-服务器即时通讯系统设计的消息通讯协议,数据编码方式为基于Tars/PB的二进制类型。原创 2023-07-02 10:59:47 · 437 阅读 · 0 评论 -
基于Tars高并发IM系统的设计与实现-基础篇1
InstantMessaging 即时通讯、实时传讯,能以最快的速度把信息从一方传递到另外一方。即时通信系统(IM,Instant Messenger)是一款跨平台(Linux Server,Windows Server),可定制的 P2P 即时通信系统(集成多人视频会议功能),为各行业门户网站和企事业单位提供“一站式”定制解决方案,打造一个稳定,安全,高效,可扩展的即时通信系统.原创 2023-07-01 11:50:20 · 379 阅读 · 0 评论 -
IM MQTT 消息payload不同数据格式对比
文本长度json压缩前zip压缩后ProtoBuffer112312770312913476312132161604024024718945255264204502702752225528528223460原创 2022-11-26 10:30:48 · 537 阅读 · 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 · 18092 阅读 · 1 评论 -
ios9设置bitcode AMR编译
修改如下脚本: CFLAGS="-isysroot $SDKROOT -arch $arch $IOSV -isystem $SDKROOT/usr/include -fembed-bitcode"原创 2015-10-14 11:49:12 · 1125 阅读 · 1 评论 -
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 · 16399 阅读 · 1 评论 -
如何计算UDP/TCP检验和checksum
如何计算UDP/TCP检验和checksum一、下面的图是一个UDP的检验和所需要用到的所有信息,包括三个部分:1.UDP伪首部2.UDP首部3.UDP的数据部分(切记不要遗漏该部分,否则就~吐血了~)首先解释下伪首部的概念,伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯为了做校验用的。还有一个概念十分重要,那就是1转载 2016-04-11 17:40:46 · 41810 阅读 · 1 评论 -
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 · 1281 阅读 · 0 评论 -
IOS下横屏方法,4.x,5.x 6.x童叟无欺
基于UITabBarController的应用,要增加支持横屏得相关函数,具体如下;1.类别化UITabBarController@interface UITabBarController(Rotation)- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrie原创 2013-01-16 10:45:00 · 496 阅读 · 0 评论 -
qt下编译警告unused parameter 的取消
编译中出现以下警告:警告:unused parameter 'nCurrSize' [-Wunused-parameter]原因是由于函数参数未使用,这在程序当中有时候很正常;所以个人认为此警告意义不大,可以取消; 取消方法: 在pro工程文件最后加入如下代码:QMAKE_CXXFLAGS += -Wno-unused-parameter原创 2013-08-13 16:05:23 · 4129 阅读 · 0 评论 -
设计模式单例使用注意
最近在将微群产品有单用户改成多用户过程中发现一些关于单例得问题,由于切换用户,该用户数据都得重新初始化;对于某些数据进行初始化最彻底得方式就是重建其实例,但对于单例类型得就不简单了,需要重写一些初始化方法。所以对于类似跟账户有关功能模块时,要慎用单例模式,可以采用其他设计模式来代替。原创 2013-01-25 11:26:28 · 374 阅读 · 0 评论 -
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 · 2601 阅读 · 0 评论 -
继承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 · 1892 阅读 · 0 评论 -
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 · 962 阅读 · 0 评论 -
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 · 1345 阅读 · 0 评论 -
QT中|Qt::Tool类型窗口自动退出消息循环问题解决
为application 设置setQuitOnLastWindowClosed属性,确实为true;将其显示为false;退出该应该程序不能调用QDialog的close消息槽,只能调用qApp->exit();a.setQuitOnLastWindowClosed(false);原创 2013-04-08 14:36:48 · 1864 阅读 · 0 评论 -
NSIS安装时自动卸载老版本
Section "" SecUninstallPrevious Call UninstallPreviousSectionEndFunction UninstallPrevious ; Check for uninstaller. ReadRegStr $R0 HKLM "${PRODUCT_UNINST_KEY}" "InstallDir" $转载 2013-10-23 16:12:37 · 3137 阅读 · 0 评论 -
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 阅读 · 0 评论 -
ubuntu 下用qt必要组件
libx11-dev libxext-dev libxtst-dev原创 2013-11-28 13:15:37 · 1649 阅读 · 0 评论 -
Qt程序crash信息的捕捉与跟踪
Qt程序crash信息的捕捉与跟踪在用qt编写程序时经常会遇到崩溃问题,如果抓取不到crash堆栈信息就会对崩溃问题束手无策,只能对其进行复现,推断。一般解决crash问题时有如下步骤:1.从软件发行版本能跟获得debug信息,在不同平台下有不同的表现方式,目前只讨论qt-mingw方式,这种方式可以利用修改工程文件配置项编译时讲debug信息加入应用程序当中;当然这会增加发行版应原创 2013-09-30 11:22:51 · 15944 阅读 · 18 评论 -
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 · 858 阅读 · 0 评论 -
IM MQTT消息payload数据格式 json,zip,protbuffer 对比
1.文本聊天内容传输时,超过280字节,zip压缩比较有意义;2.少量数据传输(<420字节),protbuffer压缩比更高,比较有优势;3.内容越多,文本传输量越大,zip压缩优势越明显;4.建议对内容超过一定数量的信息可以再进行zip压缩,以便缩小传输量;(参见600汉字,1000汉字聊天内容对比)原创 2016-01-21 13:57:43 · 11002 阅读 · 1 评论 -
图片格式JPEG,WEBP压缩,微信图片格式对比
数据对比JPEG可以设置各种压缩比,webp也可以设置各种压缩比,根据不同压缩比进行数据比对,同时也对微信非原图图进行比对,数据如下:比例\格式原图尺寸webp-06JPEG--05JPEG--04JPEG---03JPEG---02JPEG---01png压缩比10.60.50.40.原创 2016-01-28 09:44:01 · 4907 阅读 · 0 评论 -
MQTT libmosquitto源码分析
概述libmosquitto作为mosquitto开源代码的一部分,主要用来实现MQTT协议栈和数据包通讯功能。本文主要描述libmosquitto部分代码架构,实现原理,部分重要代码解析;另外还有针对该代码库的不足和问题分析。 阅读条件阅读此文,需要了解MQTT协议结构和部分实现。MQTT简述MQTT(Message Queuing Tel原创 2016-03-02 14:44:48 · 17635 阅读 · 2 评论 -
重生之--随想码农
2012年已经结束,2012很重要,重要到什么程度呢,好多人都想好了后世,惊喜得是又重生了;这都拜那部电影所赐。既然重生就要感恩,以此文纪念之。很长时间以来,一直想写点东西,始终没有出稿,一是本人忙,二是本人懒,三是不知道怎么写。2012是不平凡得一年,18大顺利召开,奥巴马连任,日本那个挑事的首相被轰下台了,移动互联网热潮开始减退了,团购价格也没优势了,大小公司都开始优化人员了,原创 2013-01-08 09:09:58 · 458 阅读 · 0 评论