摘要: 对于基于TCP开发的通讯程序,有个很重要的问题需要解决,就是封包和拆包.自从我从事网络通讯编程工作以来(大概有三年的时间了),我一直在思索和改进封包和拆包的方法.下面就针对这个问题谈谈我的想法,抛砖引玉.若有不对,不妥之处,恳求大家指正.在此先谢过大家了.一.为什么基于TCP的通讯程序需要进行封包和拆包.TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片的,其... 阅读全文
posted @ 2009-06-13 22:37 alex_lin 阅读(1846) 评论(0) 推荐(0) 编辑
摘要: 谈这个话题之前,首先要让大家知道,什么是服务器。在网络游戏中,服务器所扮演的角色是同步, 广播和服务器主动的一些行为,比如说天气,NPCAI之类的,之所以现在的很多网络游戏服务器都需要 负担一些游戏逻辑上的运算是因为为了防止客户端的作弊行为。了解到这一点,那么本系列的文章将分为 两部分来谈谈网络游戏服务器的设计,一部分是讲如何做好服务器的网络连接,同步,广播以及NPC的设置, 另一部分则将着重谈谈... 阅读全文
posted @ 2009-06-13 22:04 alex_lin 阅读(440) 评论(0) 推荐(0) 编辑
摘要: 线程的同步可分用户模式的线程同步和内核对象的线程同步两大类临界区是属于用户模式的线程同步; 只能用于一个进程里面的多线程同步内核的同步有:管理事件内核对象:跨进程:使用临界区只能同步同一进程中的线程,而使用事件内核对象则可以对进程外的线程进行同步,其前提是得到对此事件对象的访问权。可以通过OpenEvent()函数获取得到,其函数原型为:信号量内核对象:不能跨进程: 信号量的使用特点使其更适用于对... 阅读全文
posted @ 2009-06-13 15:57 alex_lin 阅读(267) 评论(0) 推荐(0) 编辑
摘要: Linux下面socket编程的非阻塞TCP研究(转)引用链接:http://xufish.blogbus.com/logs/40537344.htmltcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据.在阻塞模式下,send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送... 阅读全文
posted @ 2009-06-13 15:47 alex_lin 阅读(2199) 评论(0) 推荐(0) 编辑
摘要: WikiPedia 技术架构学习分享http://www.dbanotes.net/opensource/wikipedia_arch.htmlYouTube 的架构扩展http://www.dbanotes.net/opensource/youtube_web_arch.htmlInternet Archive 的海量存储浅析http://www.dbanotes.net/database/in... 阅读全文
posted @ 2009-06-11 22:24 alex_lin 阅读(300) 评论(1) 推荐(0) 编辑
摘要: 没有多少高深的东西,全当记录,虽然简单,但是没有做过测试还是挺容易让人糊涂的 int nRecvBuf=32*1024;//设置为32Ksetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));1、通过上面语句可以简单设置缓冲区大小,测试证明:跟epoll结合的时候只有当单次发送的数据全被从缓冲区读完毕之后才... 阅读全文
posted @ 2009-06-10 11:11 alex_lin 阅读(1044) 评论(0) 推荐(0) 编辑
摘要: 这次,我们在实验环境中,通过一个完整的TCP从三次握手建立连接,互相各发送一个数据报,然后通过四次握手断开连接的流程,来看看一般的TCP网络通讯是怎么一个样子的。我们还是在172.16.48.13(以下简称13)上建立一个TCP客户端进程,连接172.16.48.1(以下简称1)的5002端口。然后向1发送一个数据报,1收到后,向13也发送一个数据,然后13发送FIN主动断开连接。1也随后发送它的... 阅读全文
posted @ 2009-06-09 11:25 alex_lin 阅读(972) 评论(0) 推荐(0) 编辑
摘要: Ubuntu7.10 非正常关机后,启动出现如下问题.MP-BIOS bug:8254 timer not connexted to IO-APIC[24.862420]kernel panic-not syncing:IO-APIC+timer does't work!bootwith apic=debug and send a report.then try booting with the'... 阅读全文
posted @ 2009-06-08 20:38 alex_lin 阅读(665) 评论(0) 推荐(0) 编辑
摘要: 简单点说:阻塞就是干不完不准回来,非组赛就是你先干,我现看看有其他事没有,完了告诉我一声我们拿最常用的send和recv两个函数来说吧... 比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈的输出缓冲区,它执行成功并不代表数据已经成功的发送出去了,如果TCP/IP协议栈没有足够的可用缓冲区来保存你Copy过来的数据的话...这时... 阅读全文
posted @ 2009-06-05 20:50 alex_lin 阅读(1157) 评论(0) 推荐(0) 编辑
摘要: 摘要 编写连接数巨大的高负载服务器程序时,经典的多线程模式和select模式都不再适用。 应当抛弃它们,采用epoll/kqueue/dev_poll来捕获I/O事件。最后简要介绍了AIO。 由来 网络服务在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被称为 C10K问题。随着互联网的迅速发展,越来越多的网络服务开始面临C10K问题,作为大型 网站的开发人员有必要对C10K问题有一... 阅读全文
posted @ 2009-06-05 13:42 alex_lin 阅读(299) 评论(0) 推荐(0) 编辑
摘要: APUE用另外一个种方法说明了这个问题:实际上,调用dup(oldfd);等效与 fcntl(oldfd, F_DUPFD, 0)而调用dup2(oldfd, newfd);等效与 close(oldfd); fcntl(oldfd, F_DUPFD, newfd);该函数可以改变已打开的文件的性质。 #include <fcntl.h> int fcntl(int fields, i... 阅读全文
posted @ 2009-05-20 11:15 alex_lin 阅读(438) 评论(0) 推荐(0) 编辑
摘要: mysql语法参考一、资料定义 ddl(data definition language) 资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。1、建表格:create table table_name( column1 datatype [not n... 阅读全文
posted @ 2009-05-12 16:32 alex_lin 阅读(339) 评论(0) 推荐(0) 编辑
摘要: ubuntu 8.04建立mysql C开发环境 - [编程]Tag:C Linux 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://feizf.blogbus.com/logs/30689586.html安装mysqlkissgnu@kissgnu-desktop:~$ sudo apt-get install mysql-servel mysql-client下载... 阅读全文
posted @ 2009-05-11 18:07 alex_lin 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 半年不能上网,最近网络终于通了,终于可以更新博客了,写点什么呢?决定最近写一个编程技术系列,其内容是一些通用的编程技术。例如DLL,COM,Socket,多线程等等。这些技术的特点就是使用广泛,但是误解很多;网上教程很多,但是几乎没有什么优质良品。我以近几个月来的编程经验发现,很有必要好好的总结一下这些编程技术了。一来对自己是总结提高,二来可以方便光顾我博客的朋友。 好了,废话少说,言归正传。第一... 阅读全文
posted @ 2009-04-27 08:09 alex_lin 阅读(558) 评论(0) 推荐(0) 编辑
摘要: 什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的 Socket数据传输是一种... 阅读全文
posted @ 2009-03-23 21:27 alex_lin 阅读(194) 评论(0) 推荐(0) 编辑
摘要: Linux 2.6内核中提高网络I/O性能的新方法epoll 正如我昨天在“Linux下各类TCP网络服务器的实现源代码”(http://zhoulifa.bokee.com/5345930.html)一文中提到的那样,I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。感谢chinaunix.net上朋友safedead(http://bbs.chinaunix... 阅读全文
posted @ 2009-03-20 17:06 alex_lin 阅读(267) 评论(0) 推荐(0) 编辑
摘要: Linux下各类TCP网络服务器的实现源代码 大家都知道各类网络服务器程序的编写步骤,并且都知道网络服务器就两大类:循环服务和并发服务。这里附上源代码来个小结吧。 首先,循环网络服务器编程实现的步骤是这样的: 建立socket(这里用到socket()函数及函数setsockopt()) ... 阅读全文
posted @ 2009-03-20 17:05 alex_lin 阅读(517) 评论(0) 推荐(0) 编辑
摘要: 〈一〉如何实现C中调用C++如何用c语言调用c++做成的动态链接库, 转至http://blog.donews.com/xzwenlan/archive/2005/05/31/405799.aspx 链接库头文件://head.hclass A{ public: A(); virtual ~A(); int gt(); int ... 阅读全文
posted @ 2009-03-20 14:28 alex_lin 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 进程间共享数据技术是每个操作系统都具有的特性,而每个操作系统都会略有不同,而思路方面都是一致的。经过整理,各操作系统进程间共享数据技术存在以下四种方法1:管道数据2:Socket数据3:共享内存4:文件方式之 前广州某项目曾经考虑过使用管道实现,当然后来考虑到压力并不是很大,就改用文件方式处理了。Socket数据就比较直接了,同正常的网络socket一 致。共享内存技术是本文的一个重点介绍的内容。... 阅读全文
posted @ 2009-03-20 13:38 alex_lin 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 基础知识来自 linux静态库和共享库编写知识来自 linux中如何编译静态库1.什么是库在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。2.库的种类linux下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码... 阅读全文
posted @ 2009-03-20 13:36 alex_lin 阅读(501) 评论(0) 推荐(0) 编辑