左雪菲的专栏

欢迎访问我的个人网站:http://www.hootina.org

排序:
默认
按更新时间
按访问量

git配置ssh key并从github.com拉取repos

一、配置ssh key1. 进入当前用户目录cd ~2. 生成ssh keyssh-keygen -t rsa -C "ABC@qq.com"ABC@qq.com账号必须是你登录github的账户名中间如果提示文件已经存在可以选择覆盖,提示输入密码,可以直接按Enter跳过。$...

2017-05-25 16:57:07

阅读数:1400

评论数:0

TeamTalk源码分析(十) —— 开放一个TeamTalk测试服务器地址和几个测试账号

由于TeamTalk是用于企业内部的即时通讯软件,一般客户端并不提供账号注册功能。如果你仅对TeamTalk的客户端感兴趣,你可以仅仅研究pc端和移动端代码。官方的测试服务器地址已经失效,所以我已经部署了一套TeamTalk服务器,并建立了几个测试账户可以供你使用:tangsengsunwukon...

2017-05-25 12:08:05

阅读数:3338

评论数:13

TeamTalk源码分析(九) —— 服务器端route_server源码分析

route_server的作用主要是用户不同msg_server之间消息路由,其框架部分和前面的服务类似,没有什么好说的。我们这里重点介绍下它的业务代码,也就是其路由细节:void CRouteConn::HandlePdu(CImPdu* pPdu) { switch (pPdu-&a...

2017-05-20 15:49:18

阅读数:2076

评论数:5

TeamTalk源码分析(八) —— 服务器端file_server源码分析

         这篇文章我们来介绍file_server服务的功能和源码实现。TeamTalk支持离线在线文件和离线文件两种传送文件的方式。单纯地研究file_server的程序结构没多大意义,因为其程序结构和其他几个服务结构基本上一模一样,前面几篇文章已经介绍过了。 我们研究teamtalk的...

2017-05-20 15:04:38

阅读数:2028

评论数:1

TeamTalk源码分析(七) —— 服务器端msf源码分析

这篇文章是对TeamTalk服务程序msfs的源码和架构设计分析。msfs作用是用来接受teamtalk聊天中产生的聊天图片的上传和下载。还是老规矩,把该服务在整个架构中的位置图贴一下吧。可以看到,msfs仅被客户端连接,客户端以http的方式来上传和下载聊天图片。可能很多同学对http协议不是很...

2017-05-19 18:13:55

阅读数:4657

评论数:8

WinInet使用详解

WinInet是windows平台对socket进行一层封装,用来直接处理http/ftp/Gopher协议的一套windows API。我第一次接触这个是在一个客户那里,当时因为客户都需要使用http代理才能浏览网页,所以折腾了一天,才基本掌握。而时隔没多久又忘记的差不多了,这个流程就像正则表达...

2017-05-19 10:35:16

阅读数:1740

评论数:0

TeamTalk源码分析(六) —— 服务器端login_server源码分析

login_server从严格意义上来说,是一个登录分流器,所以名字起的有点名不符实。该服务根据已知的msg_server上的在线用户数量来返回告诉一个即将登录的用户登录哪个msg_server比较合适。关于其程序框架的非业务代码我们已经在前面的两篇文章《TeamTalk源码分析(四) —— 服务...

2017-05-18 16:42:27

阅读数:2431

评论数:2

TeamTalk源码分析(五) —— 服务器端msg_server源码分析

在分析msg_server的源码之前,我们先简单地回顾一下msg_server在整个服务器系统中的位置和作用:各个服务程序的作用描述如下:LoginServer (C++): 负载均衡服务器,分配一个负载小的MsgServer给客户端使用MsgServer (C++): 消息服务器,提供客户端大部...

2017-05-18 15:21:06

阅读数:2779

评论数:2

TeamTalk源码分析(四) —— 服务器端db_proxy_server源码分析

从这篇文章开始,我将详细地分析TeamTalk服务器端每一个服务的源码和架构设计。这篇从db_proxy_server开始:db_proxy_server是TeamTalk服务器端最后端的程序,它连接着关系型数据库mysql和nosql内存数据库redis。其位置在整个服务架构中如图所示:我们从d...

2017-05-17 18:07:32

阅读数:3368

评论数:3

将char* 赋值给std::string的一些陷阱

这段时间,总是要使用char或者char* 赋值给std::string,踩了不少坑。于是写了个测试代码: #include #include using namespace std; int main(int argc, char* argv[]) { string str1;...

2017-05-12 16:30:56

阅读数:4441

评论数:0

TeamTalk源码分析(三) —— 服务器端的程序架构介绍

通过上一节的编译与部署,我们会得到TeamTalk服务器端以下部署程序:db_proxy_serverfile_serverhttp_msg_serverlogin_servermsfsmsg_serverpush_serverrouter_server这些服务构成的拓扑图如下:各个服务程序的作用...

2017-05-10 13:30:10

阅读数:4569

评论数:3

TeamTalk源码分析(二) —— 服务器端的程序的编译与部署

      写在前面的话,如果您在部署teamtalk过程中遇到困难,可以关注我的微信公众号『easyserverdev』,在微信公众号中回复『teamtalk部署求助』,我将与你取得联系并协助您解决。或者您对高性能服务器开发感兴趣,您也可以关注我的微信公众号获得技术支持。      这篇我们来介...

2017-05-05 16:14:20

阅读数:5341

评论数:3

TeamTalk源码分析(一)—— TeamTalk介绍

       TeamTalk是蘑菇街开源的一款企业内部用的即时通讯软件(Enterprise IM),类似腾讯的RTX。网上也有很多的介绍,我这里也有写几遍关于这款产品的“流水账”,一方面对自己这段时间的阅读其代码做个总结,尽量做个既能宏观上从全局来介绍,又不缺少很多有价值的微观细节,另一方面如...

2017-05-05 14:58:30

阅读数:6720

评论数:3

mysql INSERT ... ON DUPLICATE KEY UPDATE语句

网上关于ON DUPLICATE KEY UPDATE大多数文章都是同一篇文章转来转去,首先这个语法的目的是为了解决重复性,当数据库中存在某个记录时,执行这条语句会更新它,而不存在这条记录时,会插入它。 相当于 先判断一条记录是否存在,存在则update,否则insert。其语法是: INSER...

2017-05-02 17:31:04

阅读数:4055

评论数:0

服务器端编程心得(七)——开源一款即时通讯软件的源码

        在我的《服务器端编程心得》这个系列的第一篇至第六篇都是讲了一些零散的不成体系的网络编程细节。今天,在这篇文章中,我将介绍一款我自主开发的即时通讯软件flamingo(中文:火烈鸟),并开源其服务器和pc客户端代码。以此来对前几篇文章中说到的理论进行实践。       代码在gith...

2017-04-06 22:57:01

阅读数:14309

评论数:12

gdb完整打印字符串

通常在gdb调试时要打印出一些字符串的内容,通过 p str@str_len  打印字符串时,通常有长度的限制,我测试linux机器上默认为200个,但实际输出的长度str_len可能大于该值。 结果不能够完全输出,而进行了省略,通过命令set print element 0就可以了。...

2017-03-22 10:01:52

阅读数:859

评论数:0

服务器端编程心得(六)—— 关于网络编程的一些实用技巧和细节

这些年,接触了形形色色的项目,写了不少网络编程的代码,从windows到linux,跌进了不少坑,由于网络编程涉及很多细节和技巧,一直想写篇文章来总结下这方面的心得与经验,希望对来者有一点帮助,那就善莫大焉了。      本文涉及的平台包括windows和linux,下面开始啦。一、非阻塞的的co...

2017-03-07 16:29:16

阅读数:2951

评论数:1

服务器编程心得(五)—— 如何编写高性能日志

一、服务器端日志与客户端日志的区别        在正式讲解之前,我们先来看一个日志类的实现方法,这个日志类也是代表中大多数客户端日志的主流写法: /** *@desc: 程序运行log类,log.h *@author: zhangyl *@date: 2017.01.17 ...

2017-03-07 11:57:32

阅读数:1918

评论数:1

GDB调试中将信号发送给程序的方法

文章来源:http://blog.csdn.net/xzz_hust/article/details/8894836 在看CSAPP的chapter 8 Exceptional Control Flow时发现用GDB调试程序时程序无法接收到ctrl-c发送的终止信号, 上网查了一下, 原来是...

2016-12-04 00:32:25

阅读数:819

评论数:0

域名转ip地址编程实现

首先ip地址在编程中有两种形式,一种是十进制点分式,如192.168.2.187,另外一种是用一个32位的整数表示(ipv4)。 域名转换成ip地址,首先调用函数gethostbyname,转换结果存在一个hostent结构体中。转换成功后的ip地址存放在hostent最后一个字段中: struc...

2016-12-02 14:25:12

阅读数:1067

评论数:0

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