左雪菲的专栏

欢迎加入高性能服务器开发交流群:729995516
私信 关注
analogous_love
码龄9年
  • 783,910
    被访问量
  • 157
    原创文章
  • 5,334
    作者排名
  • 2,375
    粉丝数量
  • 于 2011-08-23 加入CSDN
获得成就
  • 博客专家认证
  • 获得468次点赞
  • 内容获得261次评论
  • 获得727次收藏
荣誉勋章
兴趣领域
  • #后端
    #Spring#Elasticsearch#Redis#Swift#MySQL#架构#分布式#Go/GoLang#Java#C/C++#Linux#Spring Boot
TA的专栏
  • golang
    2篇
  • 从零学习游戏服务器开发
    4篇
  • 高性能服务器编程实现细节详解
    8篇
  • VisualStudio
    1篇
  • TeamTalk源码分析
    11篇
  • 蘑菇街TeamTalk源码分析
    11篇
  • nginx
    1篇
  • 网络通信基础重难点解析
  • 从零学习游戏服务器开发
    4篇
  • 远程控制软件gh0st源码分析
  • 服务器端编程心得
    8篇
  • 我维护的开源软件
    5篇
  • duilib库的研究与推广
    1篇
  • Windows应用层编程
    49篇
  • Windows内核编程
    1篇
  • linux程序设计
    11篇
  • gcc/gdb/cmake/cgdb
    11篇
  • C/C++/Assembly
    27篇
  • boost
    1篇
  • stl
    2篇
  • mysql
    5篇
  • apache
    1篇
  • Web开发
  • Android
    5篇
  • 设计模式
    1篇
  • 数据结构与算法
    1篇
  • 计算机技术∑系统原理
    11篇
  • 生活感悟
    4篇
  • Windows编程提高班
    4篇
  • git操作备忘
    4篇
  • 网络编程难点解析
    2篇
  • C++11
    6篇
  • Java
    3篇
  • redis学习与研究
  • 面试
    3篇
后端开发进阶学习资料

http://balloonwj.gitee.io/cpp-guide-web/

  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Go 函数式选项模式

本文译自 Functional Options Pattern in Go 版权@归原文所有.Golang 开发者遇到的许多问题之一是尝试将一个函数的参数设置为可选. 这是一个非常常见的用例, 有些对象应该使用一些基本的默认设置来开箱即用, 并且你偶尔可能需要提供一些更详细的配置.在很多语言中这很容易; 在 C 族语言中, 可以使用不同数量的参数提供相同函数的多个版本; 在像 PHP 这样的语言中, 可以给参数一个默认值,并在调用方法时忽略它们. 但是在 Golang 中, 这两种方式你哪个也用不了.
原创
0评论
0点赞
发布博客于 3 月前

Mac 系统 markdown 转 html/word/pdf

在Mac上,有一个软件,叫iA writer,是一个文字编辑器,可以进行md到word的转换,但它是收费的,RMB68元。如果只是临时用一下,不想购买,你可以使用pandoc。在mac下,使用方法如下:brew install pandocpandoc -f markdown -t html ./test.md | pandoc -f html -t docx -o output.docx1、安装pandoc,2、先从md转成html3、再从html转成word如果想转PDF,还要安装lat
原创
0评论
0点赞
发布博客于 5 月前

Visual Studio 2019修改为编码UTF-8的两种方式

文章链接:https://blog.csdn.net/qq_42956179/article/details/106075025?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearn
原创
0评论
0点赞
发布博客于 5 月前

golang生成c-shared so供c语言或者golang调用到例子

1.golang生成c-shared类型到so建立文件夹hello,创建main.go文件,内容如下:package main import "C" func main() {} //export Hellofunc Hello() string { return "Hello"} //export Testfunc Test() { println("export Test")}生成so脚本文件,命令行:export GOARCH="386"export
原创
0评论
0点赞
发布博客于 5 月前

玩知乎五年,我赚了多少钱?

大家好,我是张小方。小方是一位知乎老鸟,玩了快五年知乎,上个月知乎粉丝终于突破一万了,惊喜得我不知所措呀。不止一个读者在问我:小方老师现在也是知乎万粉大 V 了,知乎如此多的关注、点赞,加上付费咨询和 Live,一定赚了不少钱吧?答案嘛,赚钱是肯定的,但是赚多少可能不是期望的。既然这么多读者感兴趣,那么我今天就和大家唠嗑唠嗑我的知乎收入。啊,不,放错图了,正确的应该是这张:说来话长,但是还是要说,先让我从某年某月的某一天开始说起吧,准确的日期应该是 196...
原创
5评论
10点赞
发布博客于 6 月前

《Pc客户端开发经理之路》直播通知

分享内容:详细聊一聊 FlamingoClient ( https://github.com/balloonwj/flamingo )整体框架界面库网络框架与通信协议注册与登录功能自动升级功能日志类(日志逻辑、日志清理逻辑)一些实用的工具类聊天窗口如何组织的消息记录实现发送文字、表情、图片功能如何实现的(一条聊天消息的中转)单聊与群聊如何实现的群发功能如何实现的发送文件是如何实现的联系人列表时如何实现的最近会话列表时如何实现的Pc 客户端开发的市场现状如何成为
原创
0评论
0点赞
发布博客于 8 月前

git push 报错:you are not allowed to upload merges

git rebaseCannot rebase: You have unstaged changes.git stash # 每次 push 前git pull --rebasegit push origin HEAD:refs/for/master # gerrit reviewgit pullgit stash pop参考:https://blog.csdn.net...
原创
0评论
0点赞
发布博客于 9 月前

全面了解 Nginx 主要应用场景

作者:RayeWangwww.raye.wang/2017/02/24/quan-mian-liao-jie-nginxdao-di-neng-zuo-shi-yao/前言本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得。所以还请见谅,同时欢迎留言交流Nginx能做什么1.反...
转载
1评论
0点赞
发布博客于 2 年前

谈一谈年终奖的那些坑

转眼 2019 年就快过完了,对于广大程序员读者来说,重要的事情除了关心能不能买到回老家的车票以外,剩下的事情应该就属年终奖了。对于 IT 行业来说,所谓年终奖其实就是公司在当年的月底基于你工资的数额发一定的比例的奖金,这也是很多企业的 HR 和猎头向求职者“许诺”的待遇之一。关于年终奖,一般是求职者在应聘时和 HR 谈好,再结合所在的公司的规定在年终兑现给求职者。但是,城市的套路太深了,本文就...
原创
0评论
3点赞
发布博客于 1 年前

#pragma execution_character_set("utf-8")

#if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif
原创
0评论
0点赞
发布博客于 2 年前

公号【高性能服务器开发】精华文章摘录

文章标题:我是如何年薪五十万的?文章链接:https://mp.weixin.qq.com/s/ypfyu0skXYNQUBNZD7xt2Q文章标题:聊一聊程序员如何增加收入文章链接:https://mp.weixin.qq.com/s/vjVzcPxB44Kgc9pXgXxFng文章标题:技术面试与 HR 谈薪技巧文章链接:https://mp.weixin.qq.com/s/VsLY...
原创
1评论
2点赞
发布博客于 2 年前

基于Linux整形时间的常用计算思路

上一次分享了《Linux时间时区详解与常用时间函数》,相信大家对Linux常见时间函数的使用也有了一定的了解,在工作中遇到类似获取时间等需求的时候也一定能很好的处理。本文基于Linux整形时间给出一些简化的的常用计算思路,试图从另外的角度去加强读者对时间处理的理解,希望对您有所帮助。概述在后台server 的开发中,经常需要基于日期、时间的比较、计算。类似的功能需求可能有:判断今天是星期几,判...
原创
0评论
0点赞
发布博客于 2 年前

C++ 11 lessons

推荐一个学习 C++11 的博客:LESSON #1: ‘AUTO’LESSON #2: RANGE-BASED FORLESSON #3: UNIFORM INITIALIZATIONLESSON #4: SMART POINTERSLESSON #5: MOVE SEMANTICS
原创
0评论
1点赞
发布博客于 2 年前

std::shared_mutex和std::mutex的性能对比(benchmark)

原文作者:@玄冬Wong转载请注明原文出处:http://aigo.iteye.com/blog/2296462key world: std::shared_mutex、std::mutex、performance、benchmark、性能测试shared_mutex的适用场景比较特殊:一个或多个读线程同时读取共享资源,且只有一个写线程来修改这个资源,这种情况下才能从shared_mutex...
原创
0评论
3点赞
发布博客于 2 年前

CentOS 7.0 系统安装gcc/g++ 7.3

最近因为项目需要,需要使用 C++ 17 的一些特性,CentOS 自带的 gcc/g++ 版本是 4.8,如果没有安装,可以通过 yum 命令安装,安装命令如下:# 安装gccyum install gcc#安装 g++yum install gcc-c++由于 gcc/g++ 4.8 完全支持 C++ 11,支持部分 C++ 14,不支持 C++ 17,而完全支持 C++ 17 的...
原创
3评论
8点赞
发布博客于 2 年前

Windows 一些常用到的文件路径相关的API

Path API需要头文件:shlwapi.h其中有一些函数功能存在重复,我在认为比较常用的的函数上加红。BOOL PathFileExists(LPCTSTR lpszPath)功能:检查文件/路径是否存在LPTSTR PathFindFileName(LPCTSTR pPath)功能:获得路径中的文件名例如: PathFileFileName( “c://Program Fi...
原创
0评论
1点赞
发布博客于 2 年前

高性能服务器开发 2018 年原创汇总

2018 年就这样过去了,总结一下 2018 年『高性能服务器开发』公众号发表的一些原创文章,欢迎读者鉴阅。 面试求职 写给那些傻傻想做服务器开发的朋友 『腾讯后台开发』实习生技能要求 去BAT,你应该要看一看的面试经验总结 后台开发应该读的书 网络通信面试题目集锦 拒绝了一家公司的offer后,他们的副总和hr总监同时打电话来询问拒...
原创
4评论
21点赞
发布博客于 2 年前

程序员面试如何与HR谈薪

作为“生在红旗下,长在春风里”的“四有新人”(现在90后00后还有知道这个词的吗?_),张小方同志从毕业至今,与各路HR、HRD斗智斗勇,再加上自己的不懈努力,历尽千辛万苦终于将毕业时的1500每月的薪资提高了二十几倍。本文就和大家唠唠这些年风里来雨里去无数次铩羽而归、兢兢业业、如履薄冰、诚惶诚恐、夜不能寐、枕戈待旦、惴惴不安、临盆一脚,最终守得云开见月明的谈薪经历。当然,本文说的主要是技术面试中...
原创
3评论
8点赞
发布博客于 3 年前

面试C++后台开发考察哪些问题?

今天晚上“高性能服务器开发”QQ群(群号:49114021,有兴趣的读者可以加一下)里面一名叫“成都-go-戒炸鸡”的群友提出了他最近面试的一些面试题,面试题内容个人觉得非常典型、也非常有代表性和针对性,故拿出来与大家分享一下,也感谢他的分享。成都-go-戒炸鸡说:“今天面试,我没答出来的有redis持久化机制,redis销毁方式机制,mq实现原理,c++虚函数,hash冲突的解决,memca...
原创
8评论
54点赞
发布博客于 3 年前

『腾讯后台开发』实习生技能要求

一、操作系统方面1. 多线程相关与线程之间同步技术熟练使用(但不局限于)以下linux APIlinux下的线程创建、等待、获取线程idint pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);int pthread_...
原创
0评论
5点赞
发布博客于 3 年前

从零学习游戏服务器开发(四)LogServer源码探究

这是从零学习开源项目的第四篇,上一篇是《从零学习开源项目系列(三) CSBattleMgr服务源码研究》,这篇文章我们一起来学习LogServer,中文意思可能是“日志服务器”。那么这个日志服务器到底做了哪些工作呢?我们在Visual Studio中将LogServer设置为启动项,然后按F5将LogServer启动起来,启动成功后显示如下图:从上图中,我们可以到大致做了三件事:...
原创
3评论
5点赞
发布博客于 3 年前

从零实现一款12306抢票软件

写在前面的话每年逢年过节,一票难求读者肯定不陌生。这篇文章,我们带领读者从零实现一款12306刷票软件,其核心原理还是通过发送http请求模拟登录12306网站的购票的过程,最后买到票。关于http请求的格式和如何组装http数据包给服务器发送请求,我们在上一篇文章《从零实现一个http服务器》中已经详细介绍过了,如果还不明白的朋友可以去那篇文章看下。郑重申明一下:这里介绍的技术仅...
原创
1评论
17点赞
发布博客于 3 年前

从零实现一个http服务器

我始终觉得,天生的出身很重要,但后天的努力更加重要,所以如今的很多“科班”往往不如后天努力的“非科班”。所以,我们需要重新给“专业”和“专家”下一个定义:所谓专业,就是别人搞你不搞,这就是你的“专业”;你和别人同时搞,你比别人搞的好,就是“专家”。说到http协议和http请求,很多人都知道,但是他们真的“知道”吗?我面试过很多求职者,一说到http协议,他们能滔滔不绝,然后我问他http协议的具...
原创
12评论
28点赞
发布博客于 3 年前

从零学习游戏服务器开发(三) CSBattleMgr服务源码研究

如上图所示,这篇文章我们将介绍CSBattleMgr的情况,但是我们不会去研究这个服务器的特别细节的东西(这些细节我们将在后面的文章中介绍)。阅读一个未知的项目源码如果我们开始就纠结于各种细节,那么我们最终会陷入“横看成岭侧成峰,远近高低各不同”的尴尬境界,浪费时间不说,可能收获也是事倍功半。所以,尽管我们不熟悉这套代码,我们还是尽量先从整体来把我,先大致了解各个服务的功能,细节部分回头...
原创
5评论
5点赞
发布博客于 3 年前

从零学习游戏服务器开发(二) 最后一战概况

这份代码我也是无意中来自一个朋友,据他说也是来源于互联网,服务器端代码原来是linux版本的,但被厉害的大神修改成可以在Windows上运行。(如果不小心侵犯了您的版权,请联系我删除)。好在,这份代码中使用的大多数方法和接口都是可以跨Windows和linux两个平台的,所以linux开发下的朋友请不要感到不适,我们学习这份代码更多的不是纠结细节而是学习思路和源码。游戏主solution文件用...
原创
0评论
0点赞
发布博客于 3 年前

从零学习游戏服务器开发(一) 从一款多人联机实时对战游戏开始

写在前面的话 经常有学生或者初学者问我如何去阅读和学习一个开源软件的代码,也有不少朋友在工作岗位时面对前同事留下的项目,由于文档不完善、代码注释少、工程数量大,而无从下手。本文将来通过一个多人联机实时对战游戏——最后一战,来解答以上问题。 其实,我以上问题在我是一个学生时,我也同样因此而困惑,但是后来,我发现,对于文档缺失、注释缺失的项目,需要自己摸索,虽然是挑战,同时...
原创
3评论
20点赞
发布博客于 3 年前

理解Java Integer的缓存策略

本文将介绍 Java 中 Integer 缓存的相关知识。这是 Java 5 中引入的一个有助于节省内存、提高性能的特性。首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为。接着我们将学习这种实现的原因和目的。你可以先猜猜下面 Java 程序的输出结果。很明显,这里有一些小陷阱,这也是我们写这篇文章的原因。12345678910111213141516171819202...
原创
1评论
0点赞
发布博客于 3 年前

将NULL指针赋值给std::string变量导致程序崩溃

如题:如上图,但是我们还会经常写这样的代码,例如我的flamingo中有代码如下(已经修正):位于queryresult.cpp中如果fields[i].name为NULL的话,程序将崩溃。备忘一下,以后将char*类型赋值给std::string类型一定记得检测一下是否为空指针。...
原创
0评论
0点赞
发布博客于 3 年前

用Android Studio进行NDK编程入门实例

参考了网上各种教程,跌跌撞撞最终才把流程走通,特此记录一下:有必要先交代下开发环境:操作系统:Win7Android Studio 3.0.1gradle 3.0.1首先,新建一个Android项目,然后在MainActivity的布局文件activity_main.xml文件中新增一个测试按钮,按钮id是btnTest,效果如下所示:然后在新增一个java类,包名是:package com.ct...
原创
3评论
1点赞
发布博客于 3 年前

文章《用Android Studio进行NDK编程》配套资源

文章《用Android Studio进行NDK编程》配套资源,本来不想要积分的,可是现在CSDN规则改成资源至少是两分 - -!
zip
发布资源于 3 年前

解决无法链接GetFileVersionInfoSize、GetFileVersionInfo或VerQueryValue

xsvrDlg.obj : error LNK2019: unresolved external symbol _GetFileVersionInfoSizeW@8 referenced in function "public: int __thiscall CXsvrDlg::_UI_SetProductInfo(void)" (?_UI_SetProductInfo@CXsvrDlg@@QAE...
原创
1评论
2点赞
发布博客于 3 年前

这些年一直记不住的 Java I/O

阅读目录参考资料前言从对立到统一,字节流和字符流从抽象到具体,数据的来源和目的从简单到丰富,使用 Decorator 模式扩展功能Java 7 中引入的 NIO.2NIO.2 中的异步 I/O总结回到顶部参考资料  该文中的内容来源于 Oracle 的官方文档。Oracle 在 Java 方面的文档是非常完善的。对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Document...
原创
0评论
1点赞
发布博客于 3 年前

Java String转byte数据长度不对

今天,在用Java设计一个网络通信协议时,将一个String通过其getBytes()方法转换成byte[]时,其长度不对,记录一下。byte[] byte1 = new byte[50];String str = new String(byte, 0, 50);//此时byte1.length不等于byte2.lengthbyte[] byte2 = str.getBytes();原
原创
3评论
0点赞
发布博客于 3 年前

2018年年初的面试经验谈

说下我的面试经验吧,都是亲身经历,不喜勿喷:我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的。先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理。我本人也是上几家公司的面试官,因为接下来几年面临着成家养小孩,技术上也到了瓶颈期,虽然拿了不少offer,但是想综合比对一下,于是就参加了很多的面试。我先后去了如下...
原创
8评论
15点赞
发布博客于 3 年前

分享下金山卫士的代码

自从金山卫士的代码部分开源以来,基于它出现了各种软件,有侧重界面库的,如SOUI,有侧重电脑安全管理的,下面是我维护的版本的部分截图:主界面垃圾清理ARP防火墙隐私保护器对于广大开发者尤其是广大做Windows安全方面的朋友来说,这套代码具有很大的借鉴意义,至少我们可以知道那些所谓的“电脑管家”到底对我们的电脑做了什么事情。代码下载地址:关注我的微信公众号『easyserverdev』,然后回复『...
原创
3评论
3点赞
发布博客于 3 年前

Gh0st全套源码

Gh0st是一款优秀的远程控制软件,其可以实现对被控制端诸如文件管理、远程桌面、进程管理、视频监控等操作。
7z
发布资源于 3 年前

git合并远程仓库上的提交记录

有时候,我们用git提交代码时,因为我们的疏忽,会导致同一个问题,修改多次,因为反复提交多次,最终稳定下来,我们想把git上这些不成熟的提交记录合成一个终极记录。例如:git上依次有如下提交(按提交时间从新到旧):提交记录k提交记录m提交记录n4提交记录n3提交记录n2提交记录n1提交记录p提交记录q现在,我们想将提交记录n1~n4合并成一个提交记录n,怎么办呢?首先我们输入:git log 查看
原创
0评论
3点赞
发布博客于 3 年前

centos7 cannot find -lstdc++ 错误

解决CentOS 7 中,make源文件时出现 /usr/bin/ld: cannot find -lstdc++ 错误在CentOS 7中,使用static方法编译,需要安装static version of glibc-static libstdc++-static。使用如下命令安装yum install glibc-static libstdc++-static文章来源:https://ji
原创
0评论
1点赞
发布博客于 3 年前

git分支管理

git分支确实是一个非常好的东西,先看一个截图吧:这个图其实是很有讲究的,其中历史上的工作顺序是从C0->C1->C2->...->C13。下面开始正式备忘一下git与分支有关的记录。首先,需要明确的一个概念是无论是远程仓库还是本地仓库,git会自动将这个仓库命名成origin,默认会有一个主分支,叫master,所以引用origin仓库中master分支可以表示成orig...
原创
0评论
0点赞
发布博客于 3 年前

Android--UI布局

概述  布局(Layout)的概念是针对Activity的,Activity就是布满整个Android设备的窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,每个需要显示的Activity都需要在AndroidManifest.xml文件之中声明。  通常情况下,开发人员可以使用两种方式来创建UI组件,一种方式是使用XML方式来配置UI组件的相关属性,然后装载这些
原创
0评论
0点赞
发布博客于 3 年前

Android Studio下的build工具路径和设置位置

Android Studio下的编译工具gradle的安装路径在:磁盘路径\Android Studio\gradle\m2repository\com\android\tools\build\gradle而不是:磁盘路径\Android Studio\gradle\项目中配置gradle的位置是:项目目录下build.gradle文件中:// Top-level build file where
原创
0评论
1点赞
发布博客于 3 年前

C++11中调用函数内部定义匿名lamda函数

#include "stdafx.h"#include int _tmain(int argc, _TCHAR* argv[]){ int i = 0; int j = 0; [i, j](int k, int j) { std::cout << k << ", " << j << std::endl; }(1, 2);
原创
0评论
0点赞
发布博客于 3 年前

关于std::shared_ptr与std::enable_shared_from_this循环引用导致的问题

自从C++11有了std::shared_ptr这样的智能指针,作为C++程序只要将一个堆上的类对象用std::shared_ptr包裹一下就可以做到内存自动释放了。看一个例子:#include "stdafx.h"#include class A{public: A() { m_i = 9; } ~A() { m
原创
0评论
0点赞
发布博客于 4 年前

Java中的HashMap

http://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665514069&idx=1&sn=2996d864bbe596d0af763fba3d244fa7&chksm=80d67c16b7a1f500ec6a191eb4a0beac0e95dbd5a7bf8ee01f5ed2cb17960b9ab32c0b965949&mpshare=1&s
原创
1评论
0点赞
发布博客于 4 年前

Mysql中LAST_INSERT_ID()的函数使用详解

see: http://www.jb51.net/article/62973.htm
原创
0评论
0点赞
发布博客于 4 年前

一位10年Java工作经验的架构师聊Java和工作经验

黄勇,从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师。对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式。国内开源软件推动者之一,Smart Framework 开源框架创始人。热爱技术交流,乐于分享自己的工作经验。著有《架构探险——从零开始写Java Web框架》一书。我的十年技术之路和大家介绍下我目前所从事的工作。我目
原创
0评论
2点赞
发布博客于 4 年前

客户端软件的结构思考(一)

关于这个标题的内容我思考了很多年,也求索了很多年,每次遇到一份新的质量看起来不错客户端软件的源码时,我总是不自己觉的去学习它和研究它,以期能解决我的困惑,希望能达到我心中“完美”方案的样子。但是直到今天,我仍然没找到所谓的“完美”的答案,但是在这个成长过程中,因为借鉴、融合和吸纳了许多其他的pc软件的设计思想和技巧,我在做pc软件整体结构设计时越来越得心应手。下面是我成长的心路历程,故事很长,太多
原创
0评论
4点赞
发布博客于 4 年前

网络编程难点解析(二)—— TCP之心跳包实现思路

心跳包机制       心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。也有的心跳包中会携带一些需要定期更新的信息。       在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置
原创
0评论
3点赞
发布博客于 4 年前

网络编程难点解析(一) —— 网络异常检查

一、本文目的在涉及网络编程的实际项目应用中,由于网络不可能一直处于理想状态,TCP长连接也可能随时正常或异常地断开,如果不予处理,那么就可能因此而给程序带来很多潜在的问题。 编写该文档的目的就在于针对网络程序中可能遇到的各种问题,拿出来与大家探讨一下具体问题的解决方案,同时本人将前期调研的一些解决方案列出来,抛砖引玉,希望可以集思广益,寻求到更加合理的解决方案。二、网络断开时机1、正常网络断开(1
原创
0评论
1点赞
发布博客于 4 年前

关于std::move和std::forward

这篇文章介绍的真不错:http://www.cnblogs.com/catch/p/3507883.html总结起来:1. std::move是将左值变成右值减少不必要的拷贝;2. std::forward保持一个值的左值和右值特性不变,以变传给既能接受左值又能接受右值的函数,例:templateTYPE* acquire_obj(ARG&& arg){ return new TYPE(
原创
0评论
0点赞
发布博客于 4 年前

关于C++11中的std::XXX<void>

一般常见的有:std::sharedstd::weak_ptrstd::unique_ptrstd::function第一个、第二个和第三个的意思是:make a smart pointer which can point to many different types of data structures like structs, vectors, matrices... basically
原创
0评论
0点赞
发布博客于 4 年前

关于std::bind绑定栈变量对象的思考

我一直以为std::bind函数在给某个函数绑定参数时,如果参数是栈变量,且是类对象,等实际调用std::bind函数时,因为传递的栈变量参数已经不存在了,会导致程序崩溃,但实际上并不是这样,看代码:#include #include class A{public: A() { k = 11; std::cout << "A constru
原创
0评论
0点赞
发布博客于 4 年前

Java服务器与客户端通信框架初探

这篇文章中,我们讲述一下用Java实现网络通信的的基本流程,这里讲述的是不基于任何框架的原生语言自带的写法。Java服务器端写法:程序入口代码如下:public static void main(String[] args) { try { // ① 创建一个线程 等其他客户端的连接 final ServerSocket server = new ServerSocket(8090);
原创
0评论
0点赞
发布博客于 4 年前

win32程序显示网页

说是win32,实际程序中使用了atl的东西。所以新建win32程序时,记得勾选使用atl:代码如下:#include "stdafx.h"#include "Win32Project3.h"#include CComModule _Module;#include //#pragma comment(lib,"atl.lib")#include #define MAX_LOA
原创
0评论
0点赞
发布博客于 4 年前

DuiLib消息处理剖析

文章来源:http://blog.csdn.net/zhuhongshu/article/details/41725657分为几个大部分:控件容器(本质也是控件)UI构建解析器(XML解析)窗体管理器(消息循环,消息映射,消息处理,窗口管理等)渲染引擎DuiLib 消息循环剖析DuiLib的消息循环非常灵活,但不熟悉的可能会觉得非常混乱,不知道该如何下手。所以,我总结了下DuiLib的各种消息响应
转载
0评论
0点赞
发布博客于 4 年前

eMule,迅雷、网际快车、腾讯旋风,那些逝去的日子......

这里分享一款资源分享与下载工具——电驴,其实严格来说,应该叫电骡,这是我维护的版本,eMuleVeryCD版本,VeryCD是一个不错的资源分享网站:http://www.verycd.com/。大概在08年之前,中国市场流行的下载工具大概有三款:网际快车(flashget)、电驴(eMule)和迅雷,后来前两者都没落了。电驴的源码也开源了,迅雷抓住这个机会分析了电驴的下载协议(Kad...
原创
0评论
2点赞
发布博客于 3 月前

关于windows完成端口(IOCP)的一些理解

       本人很多年前接触完成端口以来,期间学习和练习了很多次,本以为自己真正地理解了其原理,最近在看网狐的服务器端源码时又再一次拾起完成端口的知识,结果发现以前理解的其实很多偏差,有些理解的甚至都是错误的。网络上关于windows完成端口的介绍举不胜举,但大多数都是介绍怎么做,而不是为告诉读者为什么这么做。看了很多遍小猪的讲解:http://blog.csdn.net/piggyxp/art...
原创
7评论
6点赞
发布博客于 4 年前

TeamTalk源码分析(十一) —— pc客户端源码分析

——写在前面的话 在要不要写这篇文章的纠结中挣扎了好久,就我个人而已,我接触windows编程,已经六七个年头了,尤其是在我读研的三年内,基本心思都是花在学习和研究windows程序上了。我很庆幸我当初学习windows程序走了一条正确的路线:先是学习常用的windows程序原理和基本API,再学习的mfc、wtl等一些常用的框架和类库,同时看了大量windows项...
原创
11评论
5点赞
发布博客于 4 年前

开源一款ftp软件——filezilla,包含客户端和服务器全套源码

filezilla是一款高性能ftp/sftp文件工具,关于它的具体的介绍可参见其官网:https://www.filezilla.cn/。其原作者是Tim Kosse (tim.kosse@filezilla-project.org)。大概10年前我从校园网ftp资源时无意中接触到这款软件的客户端之后,其强大的功能和流畅的性能让我一直使用至今。即使在今天,我的开发环境已经换成Linux,我...
原创
0评论
1点赞
发布博客于 4 年前

开源一款远程控制软件 —— pcshare

这里开放一款远程控制软件的源码——pcshare,该软件分为被控制端和控制端。部分界面如下:控制端通过寄生在被控制端的后台程序来实现控制,可以对被控制台进行文件管理、屏幕监控、键盘监控、监控管理、查看被控制端的服务和注册表,甚至是控制被控制端的摄像头。一、软件使用方法介绍:1. 启动PcShare.exe,这是控制端主程序,该程序会在8080端口上监听被控制端的连接。2. 生成被控制端宿主程序,点...
原创
15评论
5点赞
发布博客于 4 年前

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

一、配置ssh key1. 进入当前用户目录cd ~2. 生成ssh keyssh-keygen -t rsa -C "ABC@qq.com"ABC@qq.com账号必须是你登录github的账户名中间如果提示文件已经存在可以选择覆盖,提示输入密码,可以直接按Enter跳过。$ ssh-keygen -t rsa -C "ABC@qq.com"Generating public/private
原创
0评论
0点赞
发布博客于 4 年前

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

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

安卓版TeamTalk客户端源码

安卓版TeamTalk客户端源码,开发环境: IDE使用Android-studio java 1.7 gradle 2.2.1
zip
发布资源于 4 年前

TeamTalk pc客户端源码

TeamTalk pc客户端源码,用VS2013直接打开即可编译调试。
zip
发布资源于 4 年前

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

route_server的作用主要是用户不同msg_server之间消息路由,其框架部分和前面的服务类似,没有什么好说的。我们这里重点介绍下它的业务代码,也就是其路由细节:void CRouteConn::HandlePdu(CImPdu* pPdu){ switch (pPdu->GetCommandId()) { case CID_OTHER_HEARTB...
原创
5评论
0点赞
发布博客于 4 年前

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

这篇文章我们来介绍file_server服务的功能和源码实现。TeamTalk支持离线在线文件和离线文件两种传送文件的方式。单纯地研究file_server的程序结构没多大意义,因为其程序结构和其他几个服务结构基本上一模一样,前面几篇文章已经介绍过了。我们研究teamtalk的file_server是为了学习和借鉴teamtalk的文件传输功能实现思路,以内化为自己的知识,并加...
原创
2评论
2点赞
发布博客于 4 年前

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

这篇文章是对TeamTalk服务程序msfs的源码和架构设计分析。msfs作用是用来接受teamtalk聊天中产生的聊天图片的上传和下载。还是老规矩,把该服务在整个架构中的位置图贴一下吧。可以看到,msfs仅被客户端连接,客户端以http的方式来上传和下载聊天图片。可能很多同学对http协议不是很熟悉,或者说一知半解。这里大致介绍一下http协议,http协议其实也是一种应用层协...
原创
8评论
7点赞
发布博客于 4 年前

WinInet使用详解

WinInet是windows平台对socket进行一层封装,用来直接处理http/ftp/Gopher协议的一套windows API。我第一次接触这个是在一个客户那里,当时因为客户都需要使用http代理才能浏览网页,所以折腾了一天,才基本掌握。而时隔没多久又忘记的差不多了,这个流程就像正则表达式一样,常学常忘,常忘常学。而网络上流传的WinInet代码实例,不是编译不通过,就是粗制滥造。因此现
原创
5评论
12点赞
发布博客于 4 年前

封装了WinInet的HttpClient库

封装了WinInet的HttpClient库,提供多个http接口,强大稳定。
zip
发布资源于 4 年前

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

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

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

在分析msg_server的源码之前,我们先简单地回顾一下msg_server在整个服务器系统中的位置和作用:各个服务程序的作用描述如下:LoginServer (C++): 负载均衡服务器,分配一个负载小的MsgServer给客户端使用 MsgServer (C++): 消息服务器,提供客户端大部分信令处理功能,包括私人聊天、群组聊天等 RouteServer (C+...
原创
2评论
3点赞
发布博客于 4 年前

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

从这篇文章开始,我将详细地分析TeamTalk服务器端每一个服务的源码和架构设计。这篇从db_proxy_server开始:db_proxy_server是TeamTalk服务器端最后端的程序,它连接着关系型数据库mysql和nosql内存数据库redis。其位置在整个服务架构中如图所示:我们从db_proxy_server的main()函数开始,main()函数其实就是做了以下...
原创
12评论
5点赞
发布博客于 4 年前

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

这段时间,总是要使用char或者char* 赋值给std::string,踩了不少坑。于是写了个测试代码:#include #include using namespace std;int main(int argc, char* argv[]){ string str1; cout << "str1:" << str1 << " length: " << str
原创
0评论
10点赞
发布博客于 4 年前

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

通过上一节的编译与部署,我们会得到TeamTalk服务器端以下部署程序:db_proxy_serverfile_serverhttp_msg_serverlogin_servermsfsmsg_serverpush_serverrouter_server这些服务构成的拓扑图如下:各个服务程序的作用描述如下:LoginServer (C++): ...
原创
4评论
3点赞
发布博客于 4 年前

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

写在前面的话,如果您在部署teamtalk过程中遇到困难,可以关注我的微信公众号『easyserverdev』,在微信公众号中回复『teamtalk部署求助』,我将与你取得联系并协助您解决。或者您对高性能服务器开发感兴趣,您也可以关注我的微信公众号获得技术支持。 这篇我们来介绍下TeamTalk服务器端的编译与部署,部署文档在auto_setup下,这里我们只介...
原创
5评论
3点赞
发布博客于 4 年前

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

TeamTalk是蘑菇街开源的一款企业内部用的即时通讯软件(Enterprise IM),类似腾讯的RTX。网上也有很多的介绍,我这里也有写几遍关于这款产品的“流水账”,一方面对自己这段时间的阅读其代码做个总结,尽量做个既能宏观上从全局来介绍,又不缺少很多有价值的微观细节,另一方面如果对于作为读者的您有些许帮助,那就善莫大焉了。 项目地址github:https://g...
原创
5评论
5点赞
发布博客于 4 年前

蘑菇街TeamTalk源码

蘑菇街 TeamTalk 源码 IM 即时通讯
zip
发布资源于 4 年前

TeamTalk源码和redis-3.2.8安装程序

蘑菇街开源的即时通讯软件TeamTalk
zip
发布资源于 4 年前

mysql INSERT ... ON DUPLICATE KEY UPDATE语句

网上关于ON DUPLICATE KEY UPDATE大多数文章都是同一篇文章转来转去,首先这个语法的目的是为了解决重复性,当数据库中存在某个记录时,执行这条语句会更新它,而不存在这条记录时,会插入它。相当于 先判断一条记录是否存在,存在则update,否则insert。其语法是:INSERT INTO tablename(field1,field2, field3, ...) VAL
原创
0评论
7点赞
发布博客于 4 年前

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

在我的《服务器端编程心得》这个系列的第一篇至第六篇都是讲了一些零散的不成体系的网络编程细节。今天,在这篇文章中,我将介绍一款我自主开发的即时通讯软件flamingo(中文:火烈鸟),并开源其服务器和pc客户端代码。以此来对前几篇文章中说到的理论进行实践。 代码在github和csdn.net上各上传了一份:github地址:https://github.com/...
原创
27评论
53点赞
发布博客于 4 年前

即时通讯flamingo服务器端代码

这是即时通讯flamingo服务器端代码,目前即时通讯软件实现了如下功能: 注册 登录 查找好友、查找群 添加好友、添加群 好友列表、群列表、最近会话 单人聊天功能(包括发文字、表情、窗口抖动、离线文件) 群聊功能(包括发文字、表情) 修改密码 修改个人信息(自定义昵称、签名、个性头像等个人信息) 自动升级功能 包括聊天服务器和文件服务器,同时也是一款通用的C++11网络框架。
zip
发布资源于 4 年前

即时通讯flamingo客户端

目前即时通讯软件实现了如下功能(这里只列举网络相关的功能,其他客户端已经实现的功能不统计在列,请自行发现): 注册 登录 查找好友、查找群 添加好友、添加群 好友列表、群列表、最近会话 单人聊天功能(包括发文字、表情、窗口抖动、离线文件) 群聊功能(包括发文字、表情) 修改密码 修改个人信息(自定义昵称、签名、个性头像等个人信息) 自动升级功能
zip
发布资源于 4 年前

gdb完整打印字符串

通常在gdb调试时要打印出一些字符串的内容,通过p str@str_len  打印字符串时,通常有长度的限制,我测试linux机器上默认为200个,但实际输出的长度str_len可能大于该值。结果不能够完全输出,而进行了省略,通过命令set print element 0就可以了。eg:p *prefix@req_line_sz $25 = "GET /web/0/
原创
0评论
0点赞
发布博客于 4 年前

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

这些年,接触了形形色色的项目,写了不少网络编程的代码,从windows到linux,跌进了不少坑,由于网络编程涉及很多细节和技巧,一直想写篇文章来总结下这方面的心得与经验,希望对来者有一点帮助,那就善莫大焉了。 本文涉及的平台包括windows和linux,下面开始啦。一、非阻塞的的connect()函数如何编写 我们知道用connect()...
原创
4评论
5点赞
发布博客于 4 年前

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

一、服务器端日志与客户端日志的区别       在正式讲解之前,我们先来看一个日志类的实现方法,这个日志类也是代表中大多数客户端日志的主流写法:/** *@desc: 程序运行log类,log.h *@author: zhangyl *@date: 2017.01.17 **/#ifndef __LOG_H__#define __LOG_H__#ifdef
原创
1评论
3点赞
发布博客于 4 年前

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

文章来源:http://blog.csdn.net/xzz_hust/article/details/8894836在看CSAPP的chapter 8 Exceptional Control Flow时发现用GDB调试程序时程序无法接收到ctrl-c发送的终止信号, 上网查了一下, 原来是因为GDB默认会截获信号, 使调试程序无法接收到信号, 要使调试程序能够接收到信号有两种办法:
转载
0评论
0点赞
发布博客于 5 年前

myreactor项目C++11版本源代码

一个用C++写的echo服务器,运行在linux平台,使用epoll ET模式,支持多个客户端连接和收发消息,纯C11代码。包括C++11新的变量初始化方式、for循环、auto关键字、线程、互斥体、条件变量等C++11常用的技术。
zip
发布资源于 5 年前

myreactorserver项目源码

myreactorserver项目源码,实现echo功能,使用epoll ET模式,运行在linux平台,支持多个客户端连接。
zip
发布资源于 5 年前

域名转ip地址编程实现

首先ip地址在编程中有两种形式,一种是十进制点分式,如192.168.2.187,另外一种是用一个32位的整数表示(ipv4)。域名转换成ip地址,首先调用函数gethostbyname,转换结果存在一个hostent结构体中。转换成功后的ip地址存放在hostent最后一个字段中:struct hostent { const char *h_name; /
原创
4评论
0点赞
发布博客于 5 年前

服务器端编程心得(三)—— 一个服务器程序的架构介绍

本文将介绍我曾经做过的一个项目的服务器架构和服务器编程的一些重要细节。一、程序运行环境操作系统:centos 7.0编译器:gcc/g++ 4.8.3     cmake 2.8.11mysql数据库:5.5.47项目代码管理工具:VS2013一、程序结构该程序总共有17个线程,其中分为9个数据库工作线程D和一个日志线程L,6个普通工作线程W,一个主线程M。(以
原创
6评论
14点赞
发布博客于 5 年前

URLEncode和Decode算法代码

bool UrlEncode(const string&amp; src, string&amp; dst){ if(src.size() == 0) return false; char hex[] = "0123456789ABCDEF"; size_t size = src.size(); for (size_t i = 0; i &lt; size; ++i)...
原创
0评论
0点赞
发布博客于 5 年前

linux安装cgdb

下载完cgdb之后,进入cgdb目录,执行:$ ./configure --prefix=/usr/local$ make$ sudo make install在第一步出现如下错误,则按下面方法解决:出现错误:configure: error: CGDB requires curses.h or ncurses/curses.h to build.解决方案:
原创
5评论
3点赞
发布博客于 5 年前

在gdb中显示源码 -- gdbtui使用方法

gdb调试一直是一个让人头疼的问题,我这个多年的linux用户也一直不习惯gdb,主要是因为gdb在调试的时候不能很好的展示源码。gdb里面可以用list命令显示源码,但是list显示没有代码高亮,我忍了,可是list这种显示代码的方式,使得我总不能一眼定位到正在执行的那行代码。可以毫不夸张的说,这个问题是阻止我长期使用gdb的最大的障碍。这是如此的不便,以至于GNU都想办法解决了————使用
原创
0评论
1点赞
发布博客于 5 年前

gdb多线程下禁止线程切换

多线程下禁止线程切换:set scheduler-locking on|off|step
原创
0评论
0点赞
发布博客于 5 年前

服务器端编程心得(二)—— Reactor模式

最近一直在看游双的《高性能linux服务器编程》一书,下载链接: http://download.csdn.net/detail/analogous_love/9673008书上是这么介绍Reactor模式的:  按照这个思路,我写个简单的练习: /** *@desc: 用reactor模式练习服务器程序,main.cpp *@author: zhangyl...
原创
14评论
4点赞
发布博客于 5 年前

mysql sql语句性能调优

在做服务器开发时,有时候对并发量有一定的要求,有时候影响速度的是某个sql语句,比如某个存储过程。现在假设服务器代码执行过程中,某个sql执行比较缓慢,那如何进行优化呢?假如现在服务器代码执行如下sql存储过程特别缓慢:call sp_wplogin_register(1, 1, 1, '830000', '222222');可以按如下方法来进行调试:1. 打开mysql prof
原创
0评论
0点赞
发布博客于 5 年前

浅析linux下open函数O_CLOEXEC模式和fcntl函数FD_CLOEXEC选项

关于open函数O_CLOEXEC模式,fcntl函数FD_CLOEXEC选项,总结为如下几点:1.调用open函数O_CLOEXEC模式打开的文件描述符在执行exec调用新程序中关闭,且为原子操作。2.调用open函数不使用O_CLOEXEC模式打开的文件描述符,然后调用fcntl 函数设置FD_CLOEXEC选项,效果和使用O_CLOEXEC选项open函数相同,但分别调用
原创
0评论
1点赞
发布博客于 5 年前

linux nc命令相互发消息及传文件

一. 相互发消息步骤:     1. 服务器在某个端口上侦听,使用nc -l 主机ip地址 端口号,当然也可以加上-v来显示这个过程,如果不指定ip地址的话就默认是0.0.0.0,相当于INADDR_ANY。      2. 客户端通过 nc 主机ip地址 端口号 连接服务器,连接成功后,可以在任何一终端来相互发送数据了。服务器端:客户端
原创
0评论
5点赞
发布博客于 5 年前

第一行Android代码——.pdf

第一行Android代码——.pdf 高清 有目录
pdf
发布资源于 5 年前

CMake Practice.pdf

CMake Practice.pdf 高清 有目录 一本非常好的介绍CMake的电子书
pdf
发布资源于 5 年前