PHP应用程序设计:一个实际的例子(4)

连接网络的接口

正如我们前面所提到的那样, I R C需要一些前置处理。为连接I R C网络接口开辟一个完整的协议句柄的任务有一点艰巨。但是我们面对的是I R C而不是由数据库支持的解决办法,这是因为一个应用程序接口已经存在了,它可以为我们完成这项任务。
一定要了解市场!每一个程序项目都必须知道程序的哪部分被其他人做好了,哪一些还需要我们去做。千万不要重新设计那些已经设计好的程序!特别是一些作为商业项目地程序,我们宁可花大量的钱为那些特别的任务购买国外安全的解决方案,也不要自己设计和开发它们。因为后者有时候会更贵,更耗时间。紧接的是,外来的解决办法通常是要经常被改进的—一个不受你自己项目进展情况制约的过程。从外来公司获得升级程序,你仅仅只需要把你应用程序中对应的那一部分用更新版本替代就可以了。通过这种方法,你可以将你应用程序的某部分升级,却不需要在这些工作中投入你自己的精力。
另外,当使用现有库的时候,你会自动把你的项目建成通用的标准化的应用程序接口,这通常会带来很多好处。另一方面,如果外来的产品不能够改善自身或者不能跟得上时代,你自己受制于外来的产品已经被证实是非常消极的,就像项目中有BUG一样是不正确的。根据我们的经验,代码开放的产品成为最成功的合成外来部分。代码开放的产品的改进和扩展速度非常快,通常面向于通用的和开放的很有潜力的标准。

搜索用P H P编写的、能够利用I R C的应用程序/库,然后就设计、灵活性和易于使用这几点将它们比较一番。当然,做这件事情也是非常有趣的(但是不应成为你的主要目的)。设计通常是最重要的开发部分。设计完成之后,剩下的工作通常就非常的直接,做起来也就很简单了(即使很多程序设计员想的不一样)。
我们为这个项目选择的库之所以是p h p I R C(w w w. p h p w i z a r d . n e t / p h p I R C),原因如下:
• 使用起来很方便。
• 它是一个完美而且完整的应用程序接口。
• 它使用了基于事件的处理过程。

基于事件处理过程的使用在这里非常有趣,它是一个通常只有在传统应用程序中才能实现的技术。例如:所有的Wi n d o w s应用程序都是基于事件的程序。基于事件的程序在不停的循环中运行,等待事件的出现。事件可以包括用户输入、鼠标移动、网络事件(输入数据包)等等。只要有一个事件被发送过来,所有的要处理要刚才发生的这个事件的过程就被调用,调用时使用这个事件指定的参数(例如:输入的网络信息流的打包数据)。
确切的说,使用“传统”的编程方法,一个引入的p i n g将会被处理,如清单所示:

这段代码一直都在等待,直到它从网络上接收到数据,然后试着找出这个数据是否为一个p i n g。如果是,那么这段代码就把p o n g送回,由于统计学的原因,它要更新一个信息流计数器。接下来,它就跳回开始处。假设这种情况有成百上千的事件,其中一些可能还依赖于别的事件,有的不依赖,有的又只是出现在某种特定的情况中⋯⋯这真是太痛苦了。然而,基于事件的程序使得处理一个p i n g变得特别简单,如清单所示。

这段代码看起来好像多一点,但是却清晰多了。这段代码的主循环等待一个事件的发生。如果它发现一个发生的事件,该事件的发生是由于网络数据的输入而触发的。它就使用内部的过程处理函数h a n d l e e v e n t()来调度这个事件。该函数为此事件选择一个处理程序然后调用它。
这个处理程序依次更新信息流计数器;如果第一个事件也是一个p i n g的话,处理程序将装入这个事件进行处理。在再次使用h a n d l e e v e n t()调度这个事件之后,一个p o n g就被发送了。
ping()和incoming_data()中的任一个都可以在事件“incoming_data”中注册自己。
然而创建两个不同的事件能够使事件的种类更具多样性,而且允许更多详细的有目标性的处理过程。刚开始的时候,要习惯于使用基于事件的信息处理是有一点点难度的(它使用起来和一台有限状态的机器差不多),但是它有很多优点:

• 一个模块化的结构安装在这个应用程序中。每一个模块都独立于其他模块工作,它们可以很容易地被改变、交换或者扩展。
• 程序的任何部分都可以引发任何种类的事件,因而加强了在这个应用程序中对任何类型的事件的处理能力(换一句话说,你可以从你的代码的任何部分来控制其他部分)。
• 从程序中心的一个位置,所有的数据都可以清楚而明确的被调配到所有的容器当中去。你不必担心需要自己编写拷贝和传送的结构:每个事件的处理程序都自己负责接收数据。
• 新的代码可以很容易的插入到应用程序中:你只要创建一个能把自己注册到合适事件中的过程就可以了。
因此,一旦主要的事件调配框架被创建,整个应用程序就可以通过分别编写一个又一个的处理程序来创建。

请熟练的掌握这个用于实现有限状态的机器的技术。这些技术一般在程序设计和信息处理中都是基础性的东西。
幸运的是,这些事件调配框架都已包含在p h p I R C当中。于是我们不再需要为这个项目编写类似的程序了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值