- 博客(81)
- 收藏
- 关注
转载 在完成端口IOCP模型判断客户端是否已关闭连接(掉线)
判断客户端是否关闭: 1 GetQueuedCompletionStatus 返回 FALSE,根据错误号判断。 2 客户端端定时发送(也就是心跳包判断)补:GetQueuedCompletionStatus 的返回值为 ERROR_SUCCESS 和lpNumberOfBytes 为0的时,客户端sockt关闭。在测试的时候,连接的客户端发生异常崩溃,强制关闭客户端后,GetQueu
2008-02-25 17:54:00 1692
转载 Socket中如何设置连接超时
把CSDN与中文yahoo翻了底朝天,也没找到如何设置socket的连接超时的满意方法,问此问题的兄弟已有一大堆,这里偶就讲一下win下如何设置socket的connect超时。设置connect的超时很简单,CSDN上也有人提到过使用select,但却没有一个令人满意与完整的答案。偶所讲的也正是select函数,此函数集成在winsock1.1中,简单点讲,"作用使那些想避免在套接字调用过程中被
2008-02-25 17:52:00 763 1
转载 socket编程之完成端口(附一个简单的IOCP例子)
“完成端口”模型是迄今为止最为复杂的—种I/O模型。然而。假若—个应用程序同时需要管理为数众多的套接字,那么采用这种模型。往往可以达到最佳的系统性能,然而不幸的是,该模型只适用于以下操作系统(微软的):Windows NT和Windows 2000操作系统。因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上千个套接字的时候、而且希望随着系统内安装的CPU数量的增多、应用程序的性能也可以线性
2008-02-25 17:47:00 4844 1
转载 异步IO、APC、IO完成端口、线程池与高性能服务器(一~五)
异步IO、APC、IO完成端口、线程池与高性能服务器之一 异步IO背景:轮询 PIO DMA 中断 早期IO设备的速度与CPU相比,还不是太悬殊。CPU定时轮询一遍IO设备,看看有无处理要求,有则加以处理,完成后返回继续工作。至今,软盘驱动器还保留着这种轮询工作方式。 随着CPU性能的迅速提高,这种效率低下的工作方式浪费了大量的CPU时间。因此,中断工作方式开始成为普遍采用的技术。这种
2008-02-25 17:36:00 1314
转载 一个对Winsock 完成端口模型封装的类
源代码说明: 在WINDOWS下进行网络服务端程序开发,毫无疑问,Winsock 完成端口模型是最高效的。Winsock的完成端口模型借助Widnows的重叠IO和完成端口来实现,完成端口模型懂了之后是比较简单的,但是要想掌握Winsock完成端口模型,需要对WINDOWS下的线程、线程同步,Winsock API以及WINDOWS IO机制有一定的了解。如果不了解,推荐几本书:《Inside
2008-02-25 12:36:00 1530
转载 硬盘分区表和文件分配表格式
硬盘分区表和文件分配表 硬盘只有经过物理格式化,分区,逻辑格式化后才能使用,在进行分区时,FDISK 会在硬盘的0柱面0磁头1扇区建一个64字节的分区表,在分表的前面是主引导记录 (MRB),后面是两个字节的有效标志55H,AAH,(H表示16进制)。此扇区被称为主 引导扇区,也是病毒最爱侵袭的地方,它由主引导记录+分区表+有效标志组成。 分区表对于系统自举十分重要,它规定着系统有几个分
2008-02-25 11:44:00 702
转载 理解I/O Completion Port(完成端口)
作者:Dung Hennig 译者:fbilo CursorAdapter 类是 VFP 8 中最重要的新功能之一,因为它提供了一种简单易用、接口统一的访问远程数据源方式。在这个月的文章里,Dung Hennig 将向你展示 CursorAdapter 及它的工作方式。下个月,我们将再学习一些高级的用法。 正文: 越来越多的 VFP 程序员开始把他们的数据储存到象 SQL Server 或者 Or
2008-02-25 11:37:00 707
转载 Winsock工作模型
首先得弄清楚同步、异步、阻塞、非阻塞的概念。同步和异步是针对通讯的工作模式,阻塞和非阻塞是指socket的I/O操作。实际上对于socket,只存在阻塞和非阻塞,同步与异步是在程序实现上有所不同。以阻塞的方式执行recv函数,在没有收到数据前,此函数是不会返回的,所以这很容易执行函数的线程处于等待I/O上的数据状态,然后被挂起。非阻塞就不一样,执行recv时候不管有没有数据都立即返回,有数据时
2008-02-25 11:33:00 476
转载 完成端口相关API介绍
在Windows系统里,使用完成端口是高性能的方法之一,比如把完成端口使用到线程池和网络服务器里。现在就通过线程池的方法来介绍怎么样使用完成端口,高性能的服务器以后再仔细地介绍怎么样构造它。其实完成端口是一个队列,所有的线程都在等消息出现,如果队列里有消息,就每个线程去获取一个消息执行它。先用函数CreateIoCompletionPort来创建一个消息队列,然后使用GetQueuedComple
2008-02-25 11:32:00 663
转载 I/O完成端口模型
问题现在网络游戏很流行,上万个玩家同时在线的情况很常见,网游服务器如何处理这么巨量的数据?!要是读过了"Winsock I/O方法"这篇文章,可以了解到套接字I/O模型中的:select,WSAAsyncSelect,WSAEventSelect,Overlapped I/O模型一次最多都只能支持6 4个套接字!这些模型显然不能胜任。而Winsock I/O模型中的"Completion port
2008-02-25 11:25:00 693
转载 Winsock I/O方法
套接字模式:锁定、非锁定套接字I/O模型: select(选择)WSAAsyncSelect(异步选择)WSAEventSelect(事件选择)Overlapped I/O(重叠式I / O)Completion port(完成端口) 一、 简介 套接字模型的出现,是为了解决套接字模式存在的某些限制。所有Wi n d o w s平台都支持套接字以锁定或非锁定方式工作。然而,并非每种平台都
2008-02-25 11:21:00 572
原创 《Google Adsense的秘密》第十章:如何在互联网社区中应用AdSense
Google Adsense的秘密》第十章:如何在互联网社区中应用AdSense通过论坛、留言板和讨论组来将你的AdSense收入最大化!在第8章,我们讨论了如何通过博客来创造收入,不过博客当然不是互联网上唯一的内容,也当然不是唯一可以应用AdSense的网站类型。在一个活跃的互联网社区里,大部分内容都是用户自己创造的。你基本上很难控制网页的关键词或者主题,往好的一面说,你的AdSen
2007-06-13 15:24:00 471
原创 《Google Adsense的秘密》第九章:渠道跟踪:寻找潜在的金矿
在上一章里,我们讨论了网站内容的问题。Google不会允许你请求访问者点击广告,也不会允许你采用欺骗的办法引诱访问者点击广告。但是,好的内容对广告有着背书作用,好的内容让人们降低对广告的反感,让广告看起来更可信,也更有趣。比如,假设你有一个网站,其内容是对一些产品的客观而公正的评论,那么访问者就会更倾向于点击相应的广告来获得更多关于这些产品的知识,了解产品的最新报价,甚至在线订购。最最重要
2007-06-13 15:17:00 610
原创 《Google Adsense的秘密》第八章:内容建设
8.1 自创内容说Google Adsense比其他的在线广告系统更好的原因之一是:它的广告与你网页上的内容是相关的,用户点击这些广告是因为对它们有兴趣。并且用户们会回来再次点击它们,因为你的内容是有吸引力的。如果你网站的内容缺乏吸引力,你就会为如何吸引用户和链接而绞尽脑汁,这样你就没办法让用户成为回头客。有”正确”的内容,是通过Google Adsense获得好收入的重要条件,同时,
2007-06-13 15:16:00 619
原创 《Google Adsense的秘密》第七章:用Google搜索框黏住易变的访问者
7.1 用搜索赚钱如果来访者在你的网站中找不到他们想要的东西会怎么样?他们当然会觉得无聊,很可能他们想进行更多的搜索或更新现在的搜索。如果你提供一个Google搜索框,你就可以留住这些”逃跑者”- 并且通过他们点击搜索结果中的广告来赚钱。Google的搜索框可不仅仅是为了给你的访问者带来些额外的方便-它实实在在地能为你赚钱!如果你的 Google Adsense 广告容易被访问者忽略,
2007-06-13 15:15:00 509
原创 《Google Adsense的秘密》第五章:如何最大化广告的可见度和响应度
5.1 广告位置:你把它们放在哪儿?位置就是一切。如果不在第一位置让观众看见,就算是全世界最漂亮的广告也等于一张白纸。但是经过这么多次的Google Adsense投放之后,我想告诉你的是:最可见的位置并不总意味着最好的效果。实际上,很可能正因为它们”太刺眼”了而被浏览者视而不见。真正起作用的广告位置是那些最有可能吸引浏览者注意、占用他们最多时间的地方。你可以巧妙地利用图形、表格和其他
2007-06-13 15:14:00 569
原创 《Google Adsense的秘密》第六章:控制你的广告
6.1 吸引相关的广告合适的颜色和位置可以帮助你提高点击率,但是它们决定不了哪些广告会出现在你的网站上。理论上说,这是由Google控制的,用户无法选择。实际上,你还是可以用一些办法来阻止那些与网站内容不相关的广告出现在你的网页上。要知道,广告的相关性越强,浏览者点击广告的几率就越大。最关键的影响因素当然是你网站的内容。Google的机器人会检查你的网站并根据网站的内容和某些关键词来展
2007-06-13 15:14:00 631
原创 《Google Adsense的秘密》第四章:用色彩提高你的点击率
4.1 设计你的网站我曾经出席过一个时装展示会,整场展示会所有的模特都穿着同样的黑色套装。太单调了?不一定!这个展示会是用来展示白金首饰的,所以所有的服装设计都以衬托首饰为目的–而不能分散观众的注意力。你当然不必把整个网站都弄成同一种颜色,而是要想办法让广告成为整个页面中最吸引浏览者注意的部分,就像那些白金首饰一样。许多带有强烈图形元素的网站确实很能吸引眼球,但同时也会影响广告的效果。
2007-06-13 15:13:00 476
原创 《Google Adsense的秘密》第三章:如何优化广告提高点击率
3.1 广告形式:美化你的广告以获得成功你喜欢哪一种类型的广告:旗帜?摩天大楼?长方形,还是正方形?边框和背景用什么颜色?有成千上万种方案可以供你选择。许多人让Google替他们做决定,结果通常是Adsense系统默认的外观设置。他们犯了多大的错啊!我的经验告诉我,这种做法无异于把到手的钱丢进河里。我也曾经浪费了几乎一整年的时间,只挣到了我本应得到的十分之一的收入,仅仅因为我懒得去调整
2007-06-13 15:12:00 503
原创 《Google Adsense的秘密》第二章:开始使用Google Adsense
2.1 基础:建立你的网站本书的上一版发行之后,无数的人向我询问如何用Adsense挣钱。我总是很愿意帮助他们,但是他们中的许多人甚至连个网站都没有。这里有个基本的事实:想用Adsense挣钱,你必须得有个网站,这一点没有替代方案。不过别害怕,天下没有比建网站更容易的事情了。有了网站你就可以用它赚到真正的钱。我在这里简单介绍一下如何建立一个网站。你也可以从网络上找到大量的相关信息,我会
2007-06-13 15:06:00 431
转载 《Google Adsense的秘密》第一章:怎样通过Google AdSense赚到钱
Google只想要你的网站流量中很小的一部分。而他们愿意为这一小部分流量付一大笔钱!对于那些抱怨自己有着高流量但是低收入的站长们来说,没有比这更好更简单的办法来从那些吝啬的访问者那里获利了。而Adsense使这变得更容易!你不必安装复杂的软件,不必调查访问者来源,不必购买任何东西,甚至连一个银行帐号都不要。那么…….为什么不是人人都在用adsense挣钱
2007-06-13 15:00:00 517
原创 《Google Adsense的秘密》序言篇:如何使用本书
亲爱的读者,感谢您购买第二版增补过的《Google不传之秘:用Adsense挣大钱三部曲》!这本书的内容是有关Google Adsense的高级应用,因此我在写作的过程中假设本书的读者已经具备了有关Adsense的基础知识。别让我这句话吓住你,其实这本书是非常简单易懂的。当然,如果你是一个Adsense新手,那么你在阅读过程中可能需要查阅Adsense Support Pages或者偶尔在线索引G
2007-06-13 14:59:00 530
转载 ADSL的优化及帮助(转自维基)
修改ADSL设置解决P2P断流问题 端口映射,UPnP和功能 关于宽带ADSL用户是内网还是外网之完全解析(2005版) BitComet参数设置详解(2005版) ADSL MODEM路由设置方法详解(2005版) UPnP功能使用详解(2005版) 不会搞UPnP的人,进来! 高手支招:BT下载怎
2006-11-15 16:40:00 685
原创 ADSL路由猫端口映射集结
共享的要在主机上做端口映射,开放端口是你的BT客户端监听的端口 阿尔卡特 SpeedTouch HomePlus511 中设置端口映射 进入ADSL的Web设置页面, 在左边的菜单中点“Advanced”/"NAT" 进入NAT的设置界面后,点右边的New创建新的端口映射 Protocol选Tcp,Inside IP填192.168.1.2,Outside IP填0.0.0.0
2006-11-15 16:39:00 1994
转载 BitTorrent概述(选自维基)
BitTorrent維基百科,自由的百科全書跳转到: 导航, 搜尋 網路協議 編輯 應用層 DNS, FTP, ENRP,HTTP, IMAP, IRC, NNTP, POP3, RTP, SIP, SMTP, SNMP, SSH, Telnet, BitTorren
2006-11-15 15:17:00 1177
转载 BitTorrent 性能卓越的原因
BitTorrent 性能卓越的原因(原文是Incentives Build Robustness in BitTorrent,不知道怎么翻译比较好?)Bram Cohenbram@bitconjurer.org2003年5月22日翻译:小马哥日期:2004-6-1概要BitTorrent 文件发布系统采用针锋相对(tit_for_tat)的方法来达到帕累托有效,与当前已知的协作技术相比,它具有更
2006-11-15 11:22:00 782
转载 BitTorrent 协议规范(BT协议集合)二四
BitTorrent是一个优秀的P2P下载软件,国内又叫它BT(变态)。 BT的主页:http://bitconjurer.org/BitTorrent/index.html BT的作者:Bram Cohen,《程序员》杂志2004第3期有对他的介绍文章 BT所用的语言:python python:一种优秀的动态语言(关于动态语言的介绍,看《程序员》杂志2004年第5期)。 python的官方网站
2006-11-14 17:30:00 1403 1
转载 BitTorrent 协议规范(BT协议集合)二三
概要 上一节我们分析了BT客户端与tracker之间的通信过程。通过与 tracker 的通信,客户端获得了参与下载的其它peers 的列表。有了这些 peers 的信息,客户端就可以主动向它们发起连接,为进一步从它们那里获取所需要的文件片断做好准备。这些连接称为“主动连接”。因为连接的发起方是客户端自己。 同时,每个客户端在启动以后,都会监听某个端口,用于接受其它 peers
2006-11-14 17:28:00 1118
转载 BitTorrent 协议规范(BT协议集合)二二
昨天重新读了BT协议和客户端代码,发现对协议本身部分比较熟悉了,但是对BT在实际运行期间各种行为的发生情景还非常模糊,有些步骤还想清楚,大家一起来讨论一下. 我们来一起描述一下BT各种消息的发送情景. 有些不是特别肯定的我没有加上,大家在这个基础上进行增加或者修改. 其中client指本机上运行的BT客户端.peer指tracker返回的远程客户端. piece指torrent文件中的20byte
2006-11-14 17:24:00 1203 1
转载 BitTorrent 协议规范(BT协议集合)二一
BT客户端开始一个下载首先要处理的就是torrent文件. 而torrent文件使用bencoding编码. 所以实现bencoding编码的解析器,就是第一步工作. Bencoding is done as follows: Strings are length-prefixed base ten followed by a colon and the string. For e xample
2006-11-14 17:19:00 921
转载 BitTorrent 协议规范(BT协议集合)二十
作者:小马哥 本篇文章分析 Tracker 类,它在 track.py 文件中。 在分析之前,我们把前几篇文章的内容再回顾一下,以理清思路。 BT的源码,主要可以分为两个部分,一部分用来实现 tracker 服务器,另一部分用来实现BT的客户端。我们这个系列的文章围绕 tracker 服务器的实现来展开。 BT 客户端与 tracker 服务器之间,通过 track HTTP协议进行通信,而BT客
2006-11-14 17:17:00 972
转载 BitTorrent 协议规范(BT协议集合)十九
客户端源码分析之七:客户端与tracker通信过程4VM 作者:小马哥 l概要 上一节我们分析了BT客户端主程序的框架:一个循环的服务器程序。在这个循环过程中,客户端要完成如下任务:l Ø与 tracker 服务器通信;汇报自己的状态,同时获取其它 peers 的信息;. Ø接受其它 peers 的连接请求;a%dv Ø主动向某些 peers 发起连接请求;8 Ø对BT对等协议的分析处理;kn Ø
2006-11-14 17:13:00 1123
转载 BitTorrent 协议规范(BT协议集合)十八
客户端源码分析之六:客户端的主程序 作者:小马哥 前言: 自从7月份写完“客户端源码分析之五:Encoder 与 Connection 类”后,我就停止了继续对BT源码的分析。原因很多,最主要的还是懒惰吧。临到岁末,终于下定决心,无论如何,要完成这一系列的文章,对自己也算有个交待。 前面的几篇文章,都是深入到源码的某一部分细节之中,虽然很清晰,但无助于读者对整体构架的把握(其实我自己当时也比较糊涂
2006-11-14 17:07:00 826
转载 BitTorrent 协议规范(BT协议集合)十七
Encoder 是一种 Handler 类(关于 Handler类,请参看前面的分析文章)。它在 download.py 中被初始化。它与 Connection类一起,完成“BT对等连接”的建立,以及“BT对等协议”的分析。 为了有助于理解,我添加了一些用圆圈括起来的序号,建议你按照这个顺序去阅读。 class Connection: ②def __init__(self, Encoder,
2006-11-14 17:06:00 852
转载 BitTorrent 协议规范(BT协议集合)十六
PiecePicker 用于实现“片断选择算法”,片断选择算法在《Incentives Build Robustness in BitTorrent》一文中有介绍,我把相关内容列出来。 BT的片断选择算法,综合下面几种策略。 l 严格的优先级 片断选择的第一个策略是:一旦请求了某个片断的子片断,那么该片断剩下的子片断优先被请求。这样,可以尽可能快的获得一个完整的片断 l
2006-11-14 16:59:00 768
转载 BitTorrent 协议规范(BT协议集合)十五
(上接十四) 然后,更新 sh 这个 sha 对象,注意,是根据片断 i 剩下的数据来更新的。关于 sha::update() 的功能,请看 python的帮助。如果有两段数据 a 和 b,那么 sh = sha(a) sh.update(b),等效于 sh = sha(a+b) 所以,下面这个表达式等于 sh.update(self.storage.read(piece_size*i, self
2006-11-14 16:53:00 822
转载 BitTorrent 协议规范(BT协议集合)十四
作者:小马哥 StorageWrapper 的作用:把文件片断进一步切割为子片断,并且为这些子片断发送 request消息。在获得子片断后,将数据写入磁盘。 请结合 Storage 类的分析来看。 几点说明: 1、 为了获取传输性能,BT把文件片断切割为多个子片断。 2、 BT为获取一个子片断,需要向拥有该子片断的peer发送request消息(关于 request消息,参见《BT协议规范》)。
2006-11-14 16:49:00 742
转载 BitTorrent 协议规范(BT协议集合)十三
作者:小马哥 由于 Storage 类比较简单,我直接在源码基础上进行注释。掌握Storage,为进一步分析 StorageWrapper 类打下基础。 几点说明: 1、 Storage 类封装了对磁盘文件的读和写的操作。 2、 BT既支持单个文件的下载,也支持多个文件,包括可以有子目录。但是它并不是以文件为单位进行下载和上传的,而是以“文件片断”为单位。这可以在BT协议规范以及另一篇讲BT技术的
2006-11-14 16:48:00 772
转载 BitTorrent 协议规范(BT协议集合)十二
作者:小马哥 概述: 相对于 tracker 服务器来说,BT客户端要复杂的多,Bram Cohen 花了一年 full time 的时间来完成 BT,我估计其中大部分时间是用在 BT 客户端的实现和调试上了。 由于 BT 客户端涉及的代码比较多,我不能再象分析 tracker 服务器那样,走上来就深入到细节之中去,那样的话,我写的晕晕糊糊,大家看起来也不知所云。所以第一篇文章先来谈谈客户端的功能
2006-11-14 16:45:00 970
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人