更新2.0 二.多线程及服务器编程总结------linux多线程服务端编程 https://www.cnblogs.com/l2017/p/11335609.html 三.分布式编程总结------linux多线程服务端编程 https://www.cnblogs.com/l2017/p/11349002.html 四.c++总结------linux多线程服务端编程 https://www.cnblogs.com/l2017/p/11373315.html…
<Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错的成绩.本书购买方式见配套网站 http://chenshuo.com/book . 以下谈一谈这本书的写作背景与内容取舍的原因. 参加工作以来,我编写并维护了若干C++/Java多线程网络服务程序,这本书总结了我在开发维护这类服务程序方面的经验.工作中,我没有写过单线程的网络服务程序,没有写过C语言的网络服…
能接触这本书是因为上一个项目是用c++开发基于Linux的消息服务器,公司没有使用第三方的网络库,卷起袖子就开撸了.个人因为从业经验较短,主 要负责的是业务方面的编码.本着兴趣自己找了这本书.拿到书就简单的翻了下,看到是基于c++11标准的,用到了智能指针.bind/function等 工具.因为对c++11不是很了解再加上表较忙就搁置下来了.现在借着项目的空档期,拜读了陈硕的这本关于服务端多线程开发的书,选取了一些自己比较感兴趣的章节,有些进行了比较深度的阅读,如对象生命期的管理和线程同步.有…
<Linux 多线程服务端编程:使用 muduo C++ 网络库> 电子版已在京东和亚马逊上市销售. 京东购买地址:http://e.jd.com/30149978.html 亚马逊Kindle版:http://www.amazon.cn/dp/B00FF1XYJI 京东阅读效果: PC iPad 目前京东的阅读器没有切白边功能,值得改进.…
如果要在一台多核机器上提供一种服务或执行一个任务,可用的模式有 运行一个单线程的进程 运行一个多线程的进程 运行多个单线程的进程 运行多个多线程的进程 这些模式之间的比较已经是老生常谈,简单地总结 模式 1 是不可伸缩的 (scalable),不能发挥多核机器的计算能力: 模式 3 是目前公认的主流模式.它有两种子模式: 3a 简单地把模式 1 中的进程运行多份,如果能用多个 tcp port 对外提供服务的话: 3b 主进程+woker进程,如果必须绑定到一个 tcp port,比如 http…
并发编程基本模型 message passing和shared memory. 线程同步的四项原则 尽量最低限度地共享对象,减少需要同步的场合.如果确实需要,优先考虑共享 immutable 对象. 使用高级的并发编程构件,如TaskQueue.Producer-Consumer Queue.CountDownLatch等等. 不得已必须使用底层同步原语(primitives)时,只用非递归的互斥器和条件变量,慎用读写锁,不要用信号量. 除了使用 atomic 整数之外,不自己编写 lock-f…
内容推荐本 书主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread.这是在Linux下以native语言编写用户态高性能网络程序最成熟的模式,掌握之后可顺利地开发各类常见的服务端网络应用程序.本书以 muduo网络库为例,讲解这种编程模型的使用方法及注意事项.本书的宗旨是贵精不贵多.掌握两种基本的同步原语就可以满足各种多线程同步的功能需求,还能写出更易用的同步设施.掌…
第一章 线程安全的对象生命期管理 第二章 线程同步精要 第三章 多线程服务器的适用场合与常用编程模型 第四章 C++多线程系统编程精要 1.(P84)11个常用的最基本Pthreads函数: 2个:线程的创建和等待结束(join).封装为muduo::Thread 4个:mutex的创建.销毁.加锁.解锁.封装为muduo::MutexLock 5个:条件变量的创建.销毁.等待.通知.广播.muduo::Condition 2.(P85)不推荐使用读写锁的原因是它往往造成提高性能的错觉(允许多个…
使用智能指针解决多线程下 类的解析冲突问题 有这样一个场景 使用StockFactory记录Stock的信息  容器是map<string,smart_ptr>; 代码如下: #include <functional> #include <memory> #include <string> #include <map> #include <assert.h> #include <mutex> using std::stri…
代码来自陈硕开源代码库 muduo中 地址是https://github.com/chenshuo/muduo #pragma once #include <string> #define NAMESPACE(X) namespace X { #define NAMESPACE_END(X) } NAMESPACE(DEF) class noncopyable { protected: noncopyable() {} private: noncopyable(const noncopyabl…
http://chenshuo.com/book/ Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)http://blog.csdn.net/nk_test/article/details/51052539 链接: http://pan.baidu.com/s/1o8TrIBK 密码: x4nv…
socket编程,简单多线程服务端测试程序 前些天重温了MSDN关于socket编程的WSAStartup.WSACleanup.socket.closesocket.bind.listen.accept.recv.send等函数的介绍,今天写了一个CUI界面的测试程序(依赖MFC)作为补充.程序功能简介如下: 1:一个线程做监听用. 2:监听线程收到客户端连接后,创建新线程接收客户端数据.所有对客户端线程将加入容器,以便管理. 3:服务端打印所有客户端发来的信息. 4:服务端CUI界面输入数字…
线程存在的问题和临界区 上一章TCP/IP网络编程之多线程服务端的实现(一)的thread4.c中,我们发现多线程对同一变量进行加减,最后的结果居然不是我们预料之内的.其实,如果多执行几次程序,会发现每次程序计算的结果都不一样.那么,造成这样的原因是什么呢? 现在,假设我们一个全局变量sum的值为99,我们创建两个线程,要对sum进行加1操作,那么理想情况下,sum的值应为101.那么要对sum加1并赋值给sum,我们可以简写为:sum+=1.于是多线程可以开始对sum进行操作,但因为是多线程,…
网络版shell之网络编程练习篇--telnet服务端   以前写过一个shell命令解释器,对与shell命令解释器的执行流程有了清晰的认识,这段时间学习网络编程,至于网络编程的细节以及知识点,已经在上 一遍博客中,转载了从网上摘的文章,基本概括了网络编程的主要api,而对于程序员,更重要的是解决实际问题的能力,所以练习是非常重要的,现在,我们在 一起shell命令解释器的基础上,写一个基于socket网络编程的网络版shell命令解释器,也可以称之为telnet服务端.  telnet服务端…
ACE服务端编程系列的第三篇,探究ACE解决不同编译器之间分配堆内存的差异. 在ACE的官方示例中会看到大量的ACE_NEW_RETURN,ACE_NEW这样的宏,这是ACE为了消除不同编译器编译的代码在堆上分配内存失败的行为差异. 具体来说: 使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的C++编程习惯,也是编写可靠服务端程序所必需的. 如果使用 new 分配内存失败时,C++标准的规定是抛出异常,如果想检…
winsock 编程(简单客户&服务端通信实现) 双向通信:Client send message to Server, and if  Server receive the message, return a string "你好,客户端!我是服务器." 修改说明:If you want achieve the function that Server can also send message to Client, you only need to change the 7…
Photon Server 和 Unity3D 数据交互: Photon Server 服务端编程 Unity3D 客户端编程 VS2017 之 MYSQL实体数据模 一:Photon Server的下载安装: https://www.photonengine.com/zh-CN/sdks#server-sdkserverserver 点击下载 Download SDK(需注册登陆下载) 二:Photon Server的服务端编程: 1.新建项目MyGameServer,引用外部库(5个)并设置…
一.设置环境事务 默认情况下,服务类和操作没有环境事务,即使客户端事务传播到服务端也是如此. 尽管强制事务流从客户端传播过来,但服务端的环境事务依旧为null.为了启用环境事务,每个操作必须告诉WCF启用事务.为了解决这个问题,WCF提供了OperationBehaviorAttribute的TransactionScopeRequired属性: // 指定服务方法的本地执行行为.[AttributeUsage(AttributeTargets.Method)]public sealed cla…
为什么引入线程 为了实现服务端并发处理客户端请求,我们介绍了多进程模型.select和epoll,这三种办法各有优缺点.创建(复制)进程的工作本身会给操作系统带来相当沉重的负担.而且,每个进程有独立的内存空间,所以进程间通信的实现难度也会随之提高.且进程的切换同样也是不菲的开销.什么是进程切换?我们都知道计算机即便只有一个CPU也可以同时运行多个进程,这是因为系统将CPU时间分成多个微小的块后分配给多个进程,比方进程B在进程A之后执行,当进程A所分配的CPU时间到点之后,要开始执行进程B,此时需…
1. 服务端 #include <stdlib.h> #include <string.h> #include <errno.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <iostream> #inc…
之前在腾讯上使用了一个免费的公网服务器,只有7天,linux系统. 其实有这样的想法,是因为有个研二的师弟问我怎么样才能让连个局域网的电脑通信. 我跟他说了两种方法,一种是找个公网服务器来转发数据,另一种就是UDP打洞. 第二种太难了,所以就用第一种.突然有点想自己实现一下的冲动,于是就搞了一个免费的. 目的是:编写一个服务端,接收一个或者多个客户端.如果一个客户端发送数据,则立刻转发给其他的所有连接上的客户端(除了自己). TCP的连接程序自然很简单.定义协议后,服务端就开始监听.但是acce…
转自:http://blog.csdn.net/old_imp/article/details/8826396 一 在linux(我用的是centos系统)上安装rsync和xinetd前先查看linux上是否已经安装:#rpm -qa|grep rsync #rpm -qa|grep xinetd 若无则安装,或者使用tar编译安装 #rpm -ivh rsync-2.6.8-3.1.rpm 或者 yum install rsync(这是我使用的方法) yum  install xinetd(…
(转自:https://www.xiaohui.com/dev/server/20070904-revoke-openvpn-client.htm) OpenVPN 服务器与 VPN 客户端之间的身份验证, 主要是通过证书来进行的.有时我们需要禁止某个用户连接 VPN 服务器,则将其证书吊销即可.要吊销(Revoke) OpenVPN 客户端证书,可以参照本文( https://www.xiaohui.com/dev/server/20070904-revoke-openvpn-client.h…
客户端 客户端的作用就是捕获未处理异常, 发送异常到服务端. 关于捕获未处理异常的方法参考 http://www.cnblogs.com/youring2/archive/2012/04/25/2469974.html  http://www.cnblogs.com/eaglet/archive/2009/02/17/1392191.html 这两篇博客. 总结下来对于web程序来说, 捕获未处理异常有两种方式: 1. 定义一个HttpModule, 在这个module的context_Erro…
中秋了,首先祝大家中秋快乐,闲着无事在家整一个socket的聊天程序,有点仿QQ界面,就是瞎折腾,不知道最后是不是能将所有功能实现. 如果你对socket不了解,请看这篇文章:http://www.cnblogs.com/wolf-sun/p/3322300.html 可以让你快速对socket有个整体认识,如果你已经是socket网络编程高手,你可以忽略n个字,跳出本文章... LZ想实现的功能有: 基本的聊天功能. 可以发送文件. 可以像qq那样发送震动. 可以截图,并发送. 可以在窗口中发…
public class Test { public static void main(String[] args) throws Exception{ //1. 构造ServerSocket实例,指定服务端口. ServerSocket servSock = new ServerSocket(); servSock.bind(new InetSocketAddress("192.168.1.35", 8400)); System.out.println("socket服务端…
OpenVPN服务器与 VPN 客户端之间的身份验证, 主要是通过证书来进行的.有时我们需要禁止某个用户连接 VPN 服务器,则将其证书吊销即可.要吊销(Revoke) OpenVPN 客户端证书, (以 Linux 系统为例.Windows 下的大同小异): 进入 OpenVPN 安装目录的 easy-rsa 子目录.例如我的为 /etc/openvpn/easy-rsa/: cd /etc/openvpn/easy-rsa 执行 vars 命令 . vars 使用revoke-full命令,…