页面

2010年7月28日星期三

socket编程时的一般架构

定义一个面积业务的网络接口层,其中有需要向服务端取数据对应的函数,有服务端通知数据的接口,一个简单的如:
class IBFSocket{
    public var onLogin:Function = null;
    public var onBFData:Function = null;
    
    public function doLogin(uid,pass):void{}
    public function doMove(x,y):void{}
}
这个接口其实相当于一个抽象类,自己不实现什么功能,do函数由协议层(真正的socket,会去组织传输的数据,继承自该类)去实现,on函数同客户逻辑端来赋真正的实体函数,这样就在业务层与协议层中间放置了一个接口而使两者透明起来。

    另外在协议层也有个小技巧,协议层也会为两层:socket层和数据处理层,socket只关心接收和发送数据,并验证数据的有效性(很像TCP/IP层),而数据处理层就需要对接收来的数据进行组织,从而交给接口一个适合的数据类型;并且由于socket层的随机性,由socket层向数据处理层传递数据时都只是存入数据处理层的一个缓冲里,而数据处理层可以按照自己的节奏去取数据并处理之(如起一个timer,每隔300ms取一个数据处理)。

2010年7月17日星期六

mysql一些常用命令

mysql中常用命令
登录:mysql -uroot -p回车,输入密码
添加mysql用户:
第一种:insert into mysql.user(Host,User,Password) values ('%','user1',password('1234'));
flush privileges;
第二种:grant 权限[select,update,delete,insert或者all privileges] on 数据库.表[*.*] to user_name@localhost[%代表所有地方] identified by 'password';
修改结束符 delimiter //或者delimiter ;

查看所有数据库:show databases;
进入某数据库:use db_name;
查看库中所有表:show tables;也可以直接查看某个库的表:show tables from db_name;
查看表的结构:show columns from [db_name.]table_name;或者:describe table_name;
查看存储过程:进入某库,show procedure status;
同样可以使用 show table status; show function status;
查看详细创建过程:show create database db_name;
show create table table_name; 
show create procedure procedure_name;
查看存储过程的详细内容:select * from mysql.proc where name=proc_name;
查看数据库变量:show variables;
查看字符集:show variables like 'character_set_%;

创建表:create table table_name(
id int not null auto_increment,
name varchar(20) not null,
pwd char(32) not null,
primary key(id)
);
修改表:
alter table table_name add addr varchar(50) not null default '' add primary key (id);
alter table table_name change addr addr varchar(50) not null default '';
alter table table_name drop column addr;
alter table table_name rename table_name2;
alter table table_name add index 索引名(字段名);
创建存储过程:
drop procedure if exists procedure_name;
create procedure procedure_name(int param1 int,out param2 type)
begin
declare temp int default 1;
set @a=concat(param1);
label:loop
set temp2=param1%2;
if temp = 1 then
set param1=param1*3+1; -- 注释
else
set temp2=param1/2;
end if;
set @a=concat(@a,'->',param1);
if param1>1 then
iterate label;
end if;
leave label;
end loop label;
end
//
创建触发器://使用:用来修改一个数据的时候在数据里同时更新另一些数据,向应用程序暴露更少的接口
create trigger trigger_name
before[after] insert[update,delete]
on table_name
for each row
begin
body;
end;
会有new.XX,old.XX

2010年7月3日星期六

读《C专家编程》

    大概看了下这本书,觉得还是理解了很多东西,虽然只看了其中几章,但还是要坚持看完的。
    工作两年突然发现对最基本的语言都遗忘的这么厉害,几乎都已经忘掉了编译、计算机内存,编译型程序的执行过程等,缺少了这部分知识就好像一直在一些上层应用很白的东西一样(当然这么理解肯定是偏激的),底层知识的了解对自己所做的工作还是会有很大的帮助的。
    首先看了下C语言的起源,了解一下三十年前或者已经是四十年前了,人们是怎么用电脑的,还是贝尔实验实验室,MS很多东西都是从这里出来的,当时起了个大项目,结果项目失败了,但给了那些个牛逼的程序员丰富的经验,所以有位大神就又基于PDP-7用汇编开发了一个操作系统,那就是UNIX,但用汇编开发的系统太笨重,所以尝试用forten语言,结果还是不行,就创建了个B语言,改进于BCPL语言,而B语言的解释器常驻于PDP-7  8KB的内存中,因为是解释而不是编译,所以效率不行,并且B语言唯一面对的只是机器的字,所以当时没有类型这个概念,而当PDP-11发展起来后,处理器以硬件支持了几种不同长度的数据类型,B语言又无法发挥其性能,所以B语言就进化成了加入类型系统、变量用前先声明的C语言。
    C语言是一帮同时在做编译器设计的开发人员设计出来的,所以该语言有很多的都是为简化编译器开发而有的特性。
    理解C的声明还是比较重要的,尤其是遇到函数指针和const,操作符优先级要记牢。
    函数其实也是一种类型,在C语言中,一切都与内存地址有关