IOCP编程小结(中)】的更多相关文章

上一篇主要谈了一些基本理念,本篇将谈谈我个人总结的一些IOCP编程技巧. 网络游戏前端服务器的需求和设计 首先介绍一下这个服务器的技术背景.在分布式网络游戏服务器中,前端连接服务器是一种很常见的设计.他的职责主要有: 1. 为客户端和后端的游戏逻辑服务器提供一个软件路由 —— 客户端一旦和前端服务器建立TCP连接以后就可以通过这个连接和后端的游戏服务器进行通讯,而不再需要和后端的服务器再建立新的连接. 2. 承担来自客户端的IO压力 —— 一组典型的网络游戏服务器需要服务少则几千多则上万(休闲游…
前段时间接手了一个网络游戏前端连接服务器的开发工作,由于服务器需要在windows平台上部署,并且需要处理大量的客户端连接,因此采用IOCP来做为服务器端的编程模型就成了不二选择.虽然我对服务器开发并不陌生,但我一直以来对IOCP抱着不屑一顾的态度,感觉这个编程模型太过复杂,并不是一个良好的系统设计,所以一直没有用过.这回重新拿起来研究了一下,经过一个多月的研究和开发,目前服务器已经基本完成,即将着手进行压力测试.在研究的过程中,从网络上搜索了IOCP的相关文章和教程不下几十篇,开源的IOCP服…
 Linux多线程编程小结 前一段时间由于开题的事情一直耽搁了我搞Linux的进度,搞的我之前学的东西都遗忘了,非常烦躁的说,如今抽个时间把之前所学的做个小节.文章内容主要总结于<Linux程序设计第3版>. 1.Linux进程与线程 Linux进程创建一个新线程时,线程将拥有自己的栈(由于线程有自己的局部变量),但与它的创建者共享全局变量.文件描写叙述符.信号句柄和当前文件夹状态. Linux通过fork创建子进程与创建线程之间是有差别的:fork创建出该进程的一份拷贝,这个新进程拥有自己的…
Windows Store 手势编程小结 最近完成了一个Windows Store上面的手势操作的页面.在这里总结了一下经验和心得,希望能和大家一起分享和讨论一下. 首先,要纠正一个误区,在Windows Store里面,手势和鼠标的操作事件是不区分的.比如简单的手指滑动事件,正常的写法还是在PointerPressed, PointerPressed和PointerReleased里面去处理.大家可能认为,手势的事件应该在,ManipulationStarted和ManipulationDel…
[2019BUAA软工助教]结对编程 - 小结 一.评分规则 博客 博客共五十分 序号 要求 分值 1 在文章开头给出Github项目地址 1 2 在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间 0.5 3 看教科书和其它资料中关于Information Hiding, Interface Design, Loose Coupling的章节,说明你们在结对编程中是如何利用这些方法对接口进行设计的 5 4 计算模块接口的设计与实现过程. 设计包括代码如何组织,…
GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息. GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows图形图像程序开发的首选. 一.              GDI+的特点和新增功能 GDI+与GDI一样,都具有设备无关性.应用程序的程序员可利用GDI+这样…
在我的博客之前写了很多关于IOCP的“行云流水”似的看了让人发狂的文章,尤其是几篇关于 IOCP加线程池文章,更是让一些功力不够深厚的初学IOCP者,有种吐血的感觉.为了让大家能够立刻提升内力修为,并且迅速的掌握IOCP这个 Windows平台上的乾坤大挪移心法,这次我决定给大家好好补补这个基础. 要 想彻底征服IOCP,并应用好IOCP这个模型,首先就让我们穿越到遥远的计算机青铜器时代(以出现PC为标志),那时候普通的PC安装的还是DOS平 台,微软公司主要靠这个操作系统在IT界的原始丛林中打…
在我的博客之前写了很多关于IOCP的“行云流水”似的看了让人发狂的文章,尤其是几篇关于IOCP加线程池文章,更是让一些功力不够深厚的初学IOCP者,有种吐血的感觉.为了让大家能够立刻提升内力修为,并且迅速的掌握IOCP这个Windows平台上的乾坤大挪移心法,这次我决定给大家好好补补这个基础. 要想彻底征服IOCP,并应用好IOCP这个模型,首先就让我们穿越到遥远的计算机青铜器时代(以出现PC为标志),那时候普通的PC安装的还是DOS平台,微软公司主要靠这个操作系统在IT界的原始丛林中打拼,在D…
一.套接字编程基础 1.套接字地址结构 通用的地址结构是 struct sockaddr{ unsigned short sa_family; ]; } IPv4的套接字地址结构是 struct in_addr{ uint32_t s_addr; }; struct sockaddr_in{ short int sin_family; //TCP的协议族是AF_INET unsigned short int sin_port; struct in_addr sin_addr; unsigned…
第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流,然后进行读取服务端发送回来的大写数据,为socket读取流,最后进行客户端显示器的显示,进行读写操作,关闭资源. 网络编程TCP客户端 package com.dashucoding.tcp3; import java.io.BufferedReader; import java.io.Buffer…
在Java并发编程实践中4.4中提到向客户端加锁的方法.此为验证示例,写的不好,但可以看出结果来. package com.blackbread.test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public…
摘要: 本文主要讲解了Trie的基本思想和原理,实现了几种常见的Trie构造方法,着重讲解Trie在编程竞赛中的一些典型应用. 什么是Trie? 如何构建一个Trie? Trie在编程竞赛中的典型应用有些? 例题解析 什么是Trie? 术语取自retrieval中(检索,收回,挽回)的trie,读作“try”,也叫做前缀树或者字典树,是一种有序的树形数据结构.我们常用字典树来保存字符串集合(但不仅限于字符串),如下图就是一个字典树. 它保存的字符集合是{to,te,tea,ted,ten,a,i…
Java编程思想中的一个例子,不是很理解使用闭包的必要性,如果不使用闭包,是不是有些任务就不能完成?继续探索. package InnerClass; interface Incrementable { void increment(); } /** 被调1 */ // Very simple to just implement the interface class Callee1 implements Incrementable { private int i = 0; @Override…
注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html      <How I explained OOD to my wife> 原文链接:http://www.codeproject.com/Articles/93369/How-I-explained-OOD-to-my-wife S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编…
Java和C++都是面向对象语言.也就是说,它们都能够实现面向对象思想(封装,继乘,多态).而由于c++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学.它是在对多种程序设计语言进行了深入细致研究的基础上,据弃了其他语言的不足之处,从根本上解决了c++的固有缺陷.在这里不能完全列出不同之处,仅列出比较显著的区别: 1.指针 JAVA语言让编程者无法找到指针来直接访问内存无指针,…
编程实践中C语言的一些常见细节(转载) 对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见,省略了异常处理.我不希望读者死记硬背这些细节,而是能在自己的平台上进行实验从而获得对应的结果.另外,本文仅仅关注于C,可能会考虑C++的表现,但在C++和C#环境下的编译器所获得的看似C代码而实不同的结果不作为参考.基础的东西比如“函数参数传值”.“转义字符”…
说起Serverless这个词,我想大家应该都不陌生,那么Serverless这个词到底是什么意思?Serverless到底能解决什么问题?可能很多朋友还没有深刻的体会和体感,这篇文章我就和大家一起聊聊Serverless. 什么是Serverless 我们先将Serverless这个词拆开来看.Server,大家都知道是服务器的意思,说明Serverless解决的问题范围在服务端.Less,大家肯定也知道它的意思是较少的.那么Serverless连起来,再稍加修饰,那就是较少的关心服务器的意思…
对照mysql5.1手册,对这几天学的sql编程进行小结,主要涉及触发器.存储过程.权限管理.主从分离等,权当抛砖引玉,高手请略过. 一.触发器 通俗的说就是在指定的数据表增删改的前或后触发执行特定的sql语句,数据表为引用永久性表.不能将触发程序与TEMPORARY表或视图关联起来.可以从四个方面理解触发器: ---监视地点 table ---监视事件 insert/update/delete ---触发时间 after/before ---触发事件 insert/update/delete…
前言 由于网上关于JNI/NDK相关的知识点介绍的比较零散而且不具备参照性,所以写了这篇JNI/NDK笔记,便于作为随时查阅的工具类型的文章,本文主要的介绍了在平时项目中常用的命令.JNI数据类型.签名等,便于查阅相关资料.文末相关参考资料比较适合刚接触或者不熟悉Android NDK开发的朋友参阅. 常用命令 javac 编译java源文件生成.class文件 由于JNI对应的头文件由javah工具根据对应的.class文件生成,所以在进行JNI编程之前,写好Java代码后需要先编译,在使用j…
在C/S端编程的时候,经常要在C端和S端之间传数据时自定义一下报文的帧头,如果是在C/C++,封装帧头是一件很简单的事情,直接把unsigned char *强转为struct就行,但是在C#中,并没有提供直接从struct到byte[]的转换,这个时候就需要用到Marshal等非托管的方法了. 自定义帧 我们可以在C#中写出如下代码: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = ,Size = )] […
最近在阅读<寒江独钓_Windows内核安全编程>一书的过程中,发现修改类驱动分发函数这一技术点,书中只给出了具体思路和部分代码,没有完整的例子. 按照作者的思路和代码,将例子补充完整,发现将驱动安装在WIN7 32位环境下,键盘失效. 经调试发现,可能的原因是替换了\\Driver\\Kbdclass类驱动的所有分发函数导致,如果只替换分发IRP_MJ_READ的函数,不会有问题,以下为代码 //替换分发函数 来实现过滤 #include <wdm.h> #include <…
一.简单介绍 1.GCD简介? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中,这个调度库包含了GCD的所有的东西…
1:什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议. HTTP在客户端和服务器之间以request-response protocol(请求-回复协议)工作. 2:get 与post get只有一个流,参数附加在url后,地址行显示要传送的信息,大小个数有严格限制且只能是字符串.post的参数是通过另外的流传递的, 不通过url,所以可以很大,也可以传递二进制数据,如文件的上传. 1.安全…
1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数式编程的第一型.在面向对象编程中,我们把对象传来传去,那在函数式编程中,我们要做的是把函数传来传去,而这个,说成术语,我们把他叫做高阶函数.飞林沙 2)特点 计算视为视为函数而非指令 纯函数式编程:不需变量,无副作用,测试简单(每次的执行结果是一样的) 支持高阶函数,代码简洁 2. python支持…
对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见,省略了异常处理.我不希望读者死记硬背这些细节,而是能在自己的平台上进行实验从而获得对应的结果.另外,本文仅仅关注于C,可能会考虑C++的表现,但在C++和C#环境下的编译器所获得的看似C代码而实不同的结果不作为参考.基础的东西比如“函数参数传值”.“转义字符”.“else的最近配对”.“case的下…
转自:http://blog.csdn.net/mjp_mjp/article/details/4406059 1.多线程中的ACE_Reactor::EventLoop,当在多线程(池)中调用EventLoop时,需要注意,在Acceptor/EventHandler中要使用其中的方法Reactor()来获取ACE_Reactor的指针,不要使用ACE_Reactor::instance,道理很简单哟.不过,一定要注意,在编程时,使用Reactor()类方法,比使用单件的方法要好很多,起码安全…
 组管理相关函数介绍 相关函数 getgid,setgid,setregid 表头文件 #include<unistd.h> #include<sys/types.h> 定义函数 gid_t getegid(void); 函数说明 getegid()用来取得执行目前进程有效组识别码.有效的组识别码用来决定进程执行时组的权限.返回值返回有效的组识别码. 范例 main() { printf("egid is %d\n",getegid()); } 执行 egi…
1.用户管理相关函数介绍 geteuid(取得有效的用户识别码) 相关函数 getuid,setreuid,setuid 表头文件 #include<unistd.h> #include<sys/types.h> 定义函数 uid_t geteuid(void) 函数说明 geteuid()用来取得执行目前进程有效的用户识别码.有效的用户识别码用来决定进程执行的权限,借由此改变此值,进程可以获得额外的权限.倘若执行文件的setID位已被设置,该文件执行时,其进程的euid值便会设成…
图形设备接口(GDI)是一个可运行程序,它接受Windows应用程序的画图请求(表现为GDI函数调用),并将它们传给对应的设备驱动程序,完毕特定于硬件的输出,象打印机输出和屏幕输出.GDI负责Windows的全部图形输出,包含屏幕上输出像素.在打印机上输出硬拷贝以及绘制Windows用户界面.也就是Windows的图形编程. 一.GDI体系结构 1.  GDI32.DLL导出的函数 GDI提供几百个Windows程序中能够调用的函数.这些函数大多数是从Win32的子系统DLL GDI32.DLL…
最近耗时多天,成功的将RT3070驱动.并解决了socket的网络编程,成功的在BA9G10上面实现了USB wif.连上家里的无线路由器,通过ubuntu下面建立的服务端程序,将BA9G10中的数据成功读取到PC机上面了.其过程的艰辛和曲折说起来是满眼血泪史啊.下面将记录其中解决问题的大致过程.     最开始设计方案时,为了整体的方便.我借用了外面开发板的文件系统.本来是为了偷懒的,不知道最后我为这件事情付出了沉重的代价.开始在编译RT3070驱动时,我直接将别人的文件系统加载到BA9G10…