• 2010-06-03

    endless_tcp – 一种适应极端网络环境的网络软件架构

    Views: 22813 | No Comments

    TCP 是一种可靠连接的协议, 即使在恶劣的网络环境中(如丢包率高), 也能实现数据的可靠传输. 可以简单地和 UDP 对比. 使用 UDP 发出一份数据, 你无法通过 UDP 本身判断数据是否已经被对方收到. 但是使用 TCP, 你可以判断, 因为如果 TCP 无法保证对端收到数据, 连接便会使自己失败, 从而你得到一个通知.

    TCP 会话依赖于 IP 和端口, 也就是说, 一旦双方的任意一方的 IP 和端口发生了改变, TCP 连接就失效了. 另外, 虽然 TCP 有重传机制, 但重传失效的次数和时限用户转难控制. 为解决这两个问题, 需要实现一种不依赖于 IP/Port, 适应极其恶劣(超过 TCP 的容忍范围)的网络环境的连接协议, 称为 endless_tcp.

    Continue reading »

    Posted by ideawu at 2010-06-03 22:12:04 Tags:
  • 2010-06-01

    SSH ProxyCommand及其思想

    Views: 29525 | No Comments

    OpenSSH 的客户端有一个 ProxyCommand 的选项, 用于 SSH 客户端与服务器之间的隧道通信(tunneling). 所谓的隧道技术, 也称代理技术, 是网络通信技术的一个普遍概念, 就是把一条信道建立于另外一条信道之上.

    SSH 会话基于一个 TCP 连接. 如果我们把连接的两个端口各自的出口(也即入口)进行截获, 就可以用其它的信道来传输. 而且 SSH 仍然认为它用的是和另一端连接一条 TCP 连接.

    Continue reading »

    Posted by ideawu at 2010-06-01 00:47:42
  • 2010-05-30

    Windows Python select标准输入输出

    Views: 23587 | No Comments

    Windows 版本的 Python, select() 函数只能接受 socket, 不接受 File Object, 所以不能 select 标准输入输出.

    为此, 我开发了 win_stdio, 让 select 也能对 stdin/stdout 进行操作. 核心思想就是用 socket 作为 stdin/stdout 的代理. 结构示意如下:

    stdin -> stdin_sock -> my_stdin
    stdout <- stdout_sock <- my_stdout
    

    Continue reading »

    Posted by ideawu at 2010-05-30 19:21:24 Tags:
  • 2010-05-09

    PyPy – 吞下自己尾巴的小蟒蛇

    Views: 35603 | 2 Comments

    PyPy 项目可能会颠覆老学究和初学者的逻辑, 因为 PyPy 用 Python 语言来实现 Python 语言, 就像一只小蟒蛇吞下自己的尾巴. 也许你没见过, 但它确实存在.

    你可能会疑惑, 既然已经有了 Python, 那么为什么还用 Python 来实现 Python(PyPy)? 后者到底是什么东西?

    其实, 这其中的逻辑并不复杂. 比如 C 语言, C 语言的第一个编译器肯定不是用 C 语言来编写的, 但之后, C 编译器(如 GCC)就没有理由不用 C 来编写了. 所以, 用 Python 语言编写, 并用已存在的 Python 编译器(解释器, 执行环境)来做一个实现 Python 语言并没有什么奇怪.

    Continue reading »

    Posted by ideawu at 2010-05-09 21:30:01 Tags:
  • 2009-06-12

    一对多关系的不稳定性

    Views: 20478 | No Comments

    经典的对象关系模型有三个: 一对一(one-to-one), 一对多(one-to-many), 多对多(many-to-many). 事实上, 一对多只是一种游离的中间状态, 任何设计中一旦使用了一对多关系, 迟早会发现只有多对多才能满足业务的变更. 对象关系要么是一对一, 要么是多对多, 没有一对多.

    以博客程序作为例子, 想当然地, 认为博客作者只能是一个人, 所以用户和博客文章的关系是一对多的. 但是, 如果不把博客当为个人的日记本来使用, 把博客当做文章发布平台, 这时, 这个模型就不能使用了, 因为文章的作者是可以有多人的.

    这只是其中一个例子, 你可能认为有真正的文章发布平台, 不应该把博客程序当做文章发布系统. 想想, 人们会本能地认为一个部门只能属于一个公司, 一个小组只能属于一个部门, 但是, 多个公司合办的交流部门呢? 两个部门合作的小组呢? 这种例子数不胜数.

    根据我的经验, 一旦有人设计对象关系模型(如数据库设计)时使用出了一对多关系模型, 我们应该像看到了想抢我们饭碗的人一样警惕起来: 真的是一对多关系吗? 就跟我们问一个从天而降的不明类人生物: 你是地球人吗?

    Posted by ideawu at 2009-06-12 18:24:04 Tags: ,
  • 2009-05-28

    基于列的数据库

    Views: 11152 | No Comments

    模糊想法, 请忽略.

    基于行的数据库可以通过一对多关系的表很容易地表示树形结构的对象. 但是, 基于列的数据库, 如何表示呢?

    假设有一个对象实例, 它的某个字段是其它类型对象的列表. 这时, 如何用列的实例表示这个对象?

    首先, 基于列的数据库, 任何对象的实例都可以用一个id列表, 该id一般设计为整数.

    列实例(称为字段)不直接声明自己属于哪一个对象, 通过单独的存储对象和列实例的关系来表示原始对象(raw), 这种对象的每一个字段都是原始数据类型.

    如果对象的某个字段是其它对象的列表, 如何表示?

    这里使用对象与对象的关系表来存储.

    Continue reading »

    Posted by ideawu at 2009-05-28 12:44:57
|<<<34567891011>>>| 8/11 Pages, 62 Results.