2008年04月13日 21点21分 » 作者: lowellzhong »
libevent 是一个强大的跨平台的事件通知库,它从1.2.* 版本开始支持轻量级的http server 开发支持,随后陆续还推出轻量级 DNS server、RPC server 开发支持,网络上目前可参考的代码不多,希望本人的代码可供大家交流使用。
本例子使用 libevent-1.4.3-stable 版本。
libevent 编译安装使用默认:
./configure && make && make install
如果再编译本例子过程遇到 libtool 无法找到 libevent.so,请操作如下步骤:
echo “/usr/local/lib” >> ld.so.conf
ldconfig
查看全文 »
程序开发
2008年03月06日 11点37分 » 作者: lowellzhong »
综合分类
2008年01月28日 00点08分 » 作者: lowellzhong »
MVC程序设计模式已经被广泛应用在服务器端网页编程,通过这个开发思想彻底改变了传统的CGI程序html和CGI混合的情形,通过按照模型层、视图层、控制层将CGI语言(业务逻辑)和Html代码分离,降低了耦合度。
客户端JS和HTML也同样可以发挥MVC的思想,将JS代码和HTML代码尽可能分离,提升维护性。
改造之前
先来看一个传统的JS/HTML编写场景:Demo1.html。
通过查看源代码,可以看到 html 元素中混杂这多个事件函数,为了实现一些华丽的特性(鼠标经过文本框时文本框的边框颜色便蓝等),而不得不在input元素标签上嵌入一堆的代码,导致最终html和js的纵横交错:
<form action="?" name="form1" id="form1" onsubmit="return chkform(this)">
<p>用户:
<input type="text" name="user" id="user" onmouseover="this.style.border = '2px solid #0000ff'" onmouseout="this.style.border = '2px solid #333'" onfocus="chkuser(this, 'focus')" onblur="chkuser(this, 'blur')" value='请输入用户名' onmouseover="this.style.color = 'red'" onmouseout="this.style.color = '#333'"/></p>
<p>密码:
<input type="password" name="pass" id="pass" onmouseover="this.style.border = '2px solid #0000ff'" onmouseout="this.style.border = '2px solid #333'"/></p>
<input type="submit" value=" 登入 " />
</form>
这些html标签难道从来对js如此的霸王硬上弓毫无怨言?
改造以后
请查看这个改造后崭新场景的 demo2.html 的源代码。
你会立即发现,一起都变的如此的清晰、井井有条,原来onmouse\onmouseover等事件的代码已经在input 标签身上消失,转而这些代码都统一集中在了页面底部 body 结束标签处。
html又重新恢复了往日的干净:
<form action="?" name="form1" id="form1">
<p>用户:
<input type="text" name="user" id="user" /></p>
<p>密码:
<input type="password" name="pass" id="pass" /></p>
<input type="submit" value=" 登入 " />
</form>
事件代码被分离成:
$('user').onfocus = function () {
if(this.value == defUserValue)
{
this.value = '';
}
}
$('user').onblur = function () {
if(this.value == '')
{
this.value = defUserValue;
}
}
通过上面改造前后例子的演示,充分将js/html分离的思想应用到实际项目开发中,并形成开发框架,尤其在大中型项目中后期的页面维护上将发挥出积极的作用。
程序开发
2008年01月27日 22点12分 » 作者: lowellzhong »
通常,JavaScript/Jscript的对象有4种类型:
- 内部预定义对象(如:Object, Array, String, Match, Date等)
- 外部对象(宿主环境内创建的对象,如:浏览器中的 window, document)
- 外部组件对象(如:ActiveX控件等)
- 生成对象(就是由WEB程序员创建的对象)
下面具体介绍“生成对象”的3种实现方法:
通过 Object() 创建对象
Object() 为内部预定义对象,通过它可以快速创建对象的实例,缺点是它不具备‘类’的构造能力,不可以通过new方法实例化多个对象。
代码实现:
/* 创建名为boy的对象实例 */
var boy =
new Object
();
/* 为对象添加属性 */
boy.
name =
'lowell';
boy.
age =
26;
/* 为对象添加方法 */
boy.sayhi = function (){
alert('my name is ' + this.name + ', ' + this.age + ' years old');
}
/* 调用boy对象实例的 sayhi 方法 */
boy.sayhi();
通过 JSON 化创建对象
缺点也是不具备‘类’的构造能力,不可以通过new方法实例化多个对象。
/* 创建名为boy的对象实例 */
var boy =
{
/* 为对象添加属性 */
'name' :
'lowell',
'age' :
26,
/* 为对象添加方法 */
'sayhi' :
function(){
alert('my name is ' +
this.
name +
', ' +
this.
age +
' years old');
}
}
/* 调用boy对象实例的 sayhi 方法 */
boy.sayhi();
通过 function() 构造函数创建对象
构造函数的方式比较灵活,并且支持通过 new 方法创建对象实例,如下:
function human
(name, age
) {
/* 为对象添加属性 */
this.
name =
name;
this.
age = age;
/* 为对象添加方法 */
this.
sayhi =
function (){
alert('my name is ' +
this.
name +
', ' +
this.
age +
' years old');
}
}
/* 创建名为boy的对象实例 */
var boy = new human('lowell', 26);
/* 调用boy对象实例的 sayhi 方法 */
boy.sayhi();
/* 创建名为girl的对象实例 */
var girl = new human('lily', 18);
/* 调用girl对象实例的 sayhi 方法 */
girl.sayhi();
以上3种对象方法都是ECMAScript标准中支持的,请根据实际需要选择。
程序开发
2008年01月13日 20点51分 » 作者: lowellzhong »
咋一看ECMAScript这个英文单词估计很多从事WEB个把年头的程序员还是一头雾水。如果提及JavaScript大家可是如雷贯耳,ECMAScript和JavaScript的关系是什么?
下面收集了部分资料,有兴趣的朋友可以借此了解一下。
介绍
ECMAScript是一种由欧洲计算机制造商协会(ECMA)通过ECMA-262标准化的脚本程序设计语言。ECMA-262的第一个版本于 1997年6月被欧洲计算机制造商协会采纳。
ECMAScript是由ECMA-262标准化的脚本语言的名称。
JavaScript和JScript与 ECMAScript兼容,但包含超出ECMAScript的功能。至今为止有三个ECMA-262版本发表,第四版也已经正式公布。
历史
1995年12月升阳公司与网景通讯公司一起引入了JavaScript。1996年3月网景通讯公司发表了支持JavaScript的网景导航者2.0。由于JavaScript作为网页的客户面脚本语言非常成功,微软于1996年8月引入了Internet Explorer3.0,这个软件支持一个“约”与JavaScript相容的JScript。
1996年11月网景通讯公司将JavaScript提交给欧洲计算机制造商协会进行标准化。ECMA-262的第一个版本于1997年6月被欧洲计算机制造商协会采纳。
国内大技术环境内,目前极为匮乏标准化制定组织、团队,我们要走的路不仅仅只是实现一个高效的某一功能!
综合分类
2008年01月12日 15点38分 » 作者: lowellzhong »
Document Object Modle(DOM) 中文称为文档对象模型,是经由W3C标准协会定义的一套对于Html/Xml文档读写接口(API)规范,这样便于所有程序语言的开发人员可以对文档使用统一、标准化的方法进行读写操作。
老外特别热衷于技术标准化推广文化,不得不佩服!
不过,W3C不具体编写DOM的代码实现,而是交由各软件制造者依据使用程序语言,按照这个规范实现相应功能。
查看全文 »
综合分类
2008年01月10日 11点42分 » 作者: lowellzhong »
综合分类
2008年01月09日 22点07分 » 作者: lowellzhong »
使用一套功能使用,切合自己日常工作需求的项目管理系统,有助于培养团队良好的工作规范、提示工作效率、降低项目风险。这里推荐两款不错的WEB版本项目管理系统,希望对你有所用启发。
查看全文 »
综合分类
2008年01月05日 00点25分 » 作者: lowellzhong »
PHP的Session的实现原理就不复述,大家google相关资料。
源码下载:shared-session-memcache.rar
功能特色:配置、调用简洁
<?php
require("mysession.memcache.php");
/* please specify memcached host */
$mmc_hosts = array();
$mmc_hosts[] = array('127.0.0.1', 51001);
$mmc_hosts[] = array('127.0.0.1', 51002);
/* please specify PHPSESSIONID cookie doamin */
mysession_run($mmc_hosts, 10, '.myhost.com');
/* read session */
$_SESSION['count'] = isset($_SESSION['count']) ? $_SESSION['count'] + 1 : 0;
// TODO
?>
功能特色:均衡调度memcached
使用md5 hash算法实现session在多个memcached之间的负载均衡,如:
function mysession_dispatch
($session_id)
{
$env = &
$GLOBALS['mysession_env'];
$count =
count($env['hosts']);
if($count ==
1)
{
$index =
1;
}else{
/* load balancing */
$index =
hexdec(substr(md5($session_id),
0,
4)) %
$count;
}
$host = &
$env['hosts'][$index];
$env["index"] = $index;
$link = memcache_connect($host[0], $host[1]);
return($link);
}
程序开发
2008年01月04日 20点54分 » 作者: lowellzhong »
目前国内最大的个人空间交友网站 www.51.com 于2008年1月1日正式推出了自己的即时通讯软件:51挂挂,一个俏皮的名字!
软件可以到官方网站下载:http://guagua.51.com
51挂挂从界面体现了和51.com网站一样的简洁低调的风格,使用方便,并且和网站的用户留言、评论、访客日志等数据进行了及时互通。
腾讯QQ再2007年末送走了珊瑚虫,现在又迎来了51挂挂,真是一波未平一波又起。

查看全文 »
综合分类