惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Last Week in AI
Last Week in AI
Project Zero
Project Zero
L
LINUX DO - 最新话题
C
Cisco Blogs
P
Privacy International News Feed
S
Schneier on Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Security @ Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
V
Vulnerabilities – Threatpost
W
WeLiveSecurity
Webroot Blog
Webroot Blog
K
Kaspersky official blog
Help Net Security
Help Net Security
博客园_首页
Security Archives - TechRepublic
Security Archives - TechRepublic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
雷峰网
雷峰网
The Last Watchdog
The Last Watchdog
WordPress大学
WordPress大学
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
A
Arctic Wolf
I
Intezer
V
V2EX
博客园 - 【当耐特】
Latest news
Latest news
T
Tenable Blog
Google Online Security Blog
Google Online Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
Cyberwarzone
Cyberwarzone
量子位
G
GRAHAM CLULEY
T
Troy Hunt's Blog
博客园 - Franky
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 三生石上(FineUI控件)
TaoSecurity Blog
TaoSecurity Blog
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
Jina AI
Jina AI
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
Scott Helme
Scott Helme

博客园 - 彭帅

周末开发的一个Google Wave类似的评论系统 CloudHosting平台Eucalyptus分析. Hadoop Ecosystem解决方案---数据仓库 关于HDFS数据Checksum hadoop MapReduce Job失效模型 - 彭帅 设计遐想---基于Google App Engine的IM 系统容灾备份选型的决策表 GAE技巧汇总 hadoop Map Stage流程分析 hadoop作业调度 - 源码分析 A Viewstate for PHP Internet级单点登录的数据管理(转) a CouchDB essentials 从网络上整理的google c++编程风格指南 UserAgent的历史变迁 云计算-My Future, The IT's Future (转载)Hadoop常用SDK系列五 TotalOrderPartitioner OnlyXP盘点2008下半年的学习情况
网络编程套路杂记1
彭帅 · 2009-03-25 · via 博客园 - 彭帅

edisonpeng@tencent.com

网络client程序

基本套路:

1. connect to server

  异步connect + callback方式

2. send request & recv response

  同步方式send + recv方式.

    异步回调

      每个请求生成一个Token, 发送请求并把Token存放到一个TokenTracker中, 之后callback回来后在TokenTracker中查找相应token,并进行相应回调处理.这是典型的

      ACT(Asynchronous Completion Token)模式, 通常结合主动对象模式(Active Object)来实现RPC中间件的AMI(Asynchronous method invocation).ICE就是一例.

    异步FutureTask

      在某个选定时刻进行同步等待. 也是基于ACT和Active Object来实现.

网络server程序

Stateless server

     例如http server, 只需要维护 连接对象, 一个连接(connection)对象通常也包含其相关的请求对象(request).

     a. 若每个连接的请求是时序同步执行的:每个连接通常只需关联一个请求对象.等接收完一个请求的数据后,屏蔽其网络事件,直到处理完一个请求后才重新注册其网络事件.

     b. 若每个连接可同时发送多个请求,则每个连接会若干个请求对象.

   无论是a还是b情况下,每个请求的数据的接收和响应的发送必须时序化.

Stateful Server

    例如用户状态服务器, 连接和client session的对应关系可能是 一对一, 一对多 或者 多对一.

    如果连接和session是一对一,则session直接作为连接的attachment.

    如果连接和session是 一对多 或者 多对一 关系. 那么必须有单独的查找表用于记录 连接 -> session 的对应关系.

1. accept 新连接.

 创建新连接对象,新连接交给连接管理器进行session维护. 

 这里client connection的处理可以分为: connection per process/thread, threadPool等.

2. 请求处理

    主要涉及的工作包括: 数据读取, 请求解析, 请求过滤(包括黑白名单过滤, 权限验证等), 请求处理.

 总的来说,此阶段的工作可以做成SEDA模型, 比如数据读取可以根据不同的类别作不同的权衡,信令数据用单线程读取,大块数据用多线程/线程池读取.

    其余阶段依此类推.

    示例: Java的开源网络框架Mina,还有facebook的cassandra都实现了SEDA的网络处理模型.

server设计的技巧

1. 海量连接管理

如果在unix/linux下, 比如httpserver, 可以预先分配一个65535的数组来管理连接,因为linux下连接的fd都是整型,且分配是自增的,这样连接的定位就是O(1)的.

2. 海量Session超时处理

比如Google的Chubby这种有大量client session的server, 我们可以按照一定的超时时间刻度对session进行分组,并对组按session lastTouchTime时间降序排序,这样我们每次只需要检查session队列尾部元素是否过期并批量清除.

2. 异步的技巧

通过引入队列buffering机制来消除编程上的异步语义,单机网络程序比如tencent的MCP, 分布式网络程序比如JMS.

posted on 2009-03-25 00:27  彭帅  阅读(2612)  评论()    收藏  举报