2012年3月5日

MySQL IP字符串转数字存储过程

摘要: DELIMITER$$USE`db_im`$$DROPPROCEDUREIFEXISTS`P_bi_parasIP`$$CREATEDEFINER=`root`@`localhost`PROCEDURE`P_bi_parasIP`(INPi_ipstrVARCHAR(50),OUTPo_int1INT,OUTPo_int2INT,OUTPo_int3INT,OUTPo_int4INT,OUTPo_retINT)BEGINDECLAREv_strtempVARCHAR(50);DECLAREv_posINT;DECLAREv_subVARCHAR(10);DECLAREv_tailVARCHAR 阅读全文

posted @ 2012-03-05 22:19 心笑峰 阅读(1902) 评论(0) 推荐(0) 编辑

2012年3月2日

Erlang 聊天室程序(八) 主题房间---supervisor 的使用

摘要: 之前实现的功能相当于一个大厅,这里我们为这个聊天室程序添加“主题房间的功能”。客户端登陆后处于大厅中,然后获取目前所有的主题房间,再发送消息进入到某个房间内。同一房间的成员可见,发送的消息也只限本房间可见。 为了管理这些房间,Erlang Opt中的监控树是最合适的。 新建一个模块room_manager.erl 其行为遵守gen_supervisor,子进程为chat_roominit(Para)-> {ok, { {one_for_one,3,5}, [ {the_room, {chat_room,start_link,[]}, pe... 阅读全文

posted @ 2012-03-02 18:03 心笑峰 阅读(1800) 评论(0) 推荐(0) 编辑

Erlang 聊天室程序(七) 获取在线用户

摘要: 先定义消息格式如下: 请求: #message{type="get",subject="clientinfo",content="all"} 响应:#message{type="result",subject="clientinfo",content=[#clientinfo,#clientinfo,.....]} 修改客户端发送请求消息部分:clientThread.sendMsg(new Message("get","client","&qu 阅读全文

posted @ 2012-03-02 14:12 心笑峰 阅读(936) 评论(0) 推荐(0) 编辑

JAVA JSON String to Object 转换中的集合

摘要: 如果要转换到的Bean类中含有类似ArrayList、Map、List这样的集合时,要对集合进行处理,否则会报“net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXX”这样的异常。 处理方法如下: 1.定义一个Map Map <String,Class> mymap = new HashMap<String,Class>(); 2.向Map中put Bean中集合成员名和对应的类型 mymap.put("content",ClientInfo.class); //我这里的成员名为content 阅读全文

posted @ 2012-03-02 12:28 心笑峰 阅读(7503) 评论(0) 推荐(0) 编辑

2012年3月1日

Erlang 聊天室程序(六) 设置客户端程序2

摘要: 上篇开了个头编写了基本的框架,这次连同客户端服务器端代码一起完善下。 首先修改客户端代码: 之前在数据交换部分,客户端中定义了一个Message bean类,里面包含了发送一条消息所需要的基本信息,包括id、type、subject、from、to、content等。但这里的content是一个String 类型,如果要表示更复杂的消息就不太适用了。 由于所有的消息id、type、subject、from、to 这几个成员的类型是确定的,对应的操作方法也是固定的,所以我们抽象出一个抽象类:Packet 用来表示交互中的所有消息:Packet.java:package com.kinglong. 阅读全文

posted @ 2012-03-01 14:25 心笑峰 阅读(532) 评论(0) 推荐(0) 编辑

2012年2月28日

Erlang 聊天室程序(五) 设置客户端信息

摘要: 接下来实现设置客户端信息功能,使客户端可以设置自己的名称、性别、年龄、所做省份等信息。我们暂时不管客户端如何实现,先对服务器端代码进行调整。 这里需要做以下几件事: 1.修改client_session中handle_info({tcp,Socket,Data},State) 函数对接收到的消息包的处理,使其能支持“客户端信息设置消息”。 考虑到后面还会有更多种类的消息,在这里添加一个消息路由模块message_router.erl,主要负责验证收到的消息类型和主题,并最终路由到正确的消息处理模块中去。 2.将chat_room中的客户端信息管理代码独立为一个client_manager.e. 阅读全文

posted @ 2012-02-28 17:30 心笑峰 阅读(800) 评论(0) 推荐(0) 编辑

2012年2月27日

Erlang 聊天室程序(四) 数据交换格式---json的encode

摘要: 上一篇实现了json数据到message记录的转换,这篇则是将message还原为json以便发送给客户端。 首先完善上篇中creationDate部分的解析:para({"creationDate",Val},Data)-> {obj,List}=Val, Time=#time{}, NewData1=Data#message{time=Time}, NewData=paraEle(List,NewData1);para({"date",Val},Data) when is_integer(Val)-> io:format("pa 阅读全文

posted @ 2012-02-27 21:03 心笑峰 阅读(1575) 评论(0) 推荐(0) 编辑

Erlang 聊天室程序(三) 数据交换格式---json的decode

摘要: 霸哥的blog中提到过Erlang服务器在通信中与客户端的数据交换方式:yufeng 为了简单起见这个聊天室程序采用json,要使用到rfc4627这个库 先定义一个Message类:public class Message { String id; //消息ID String type; //消息类型 String from; //发送方 String to; //接收方 String subject; //主题 String content; //内容 Date creationDate; //时间 public Message(String type,String fro... 阅读全文

posted @ 2012-02-27 18:29 心笑峰 阅读(1413) 评论(0) 推荐(0) 编辑

2012年2月25日

Erlang 聊天室程序(二) 客户端的退出

摘要: 接着上一篇Erlang 聊天室程序(一) 。客户端退出会导致服务器端异常退出。 异常信息如下:client sockt closed ** exception exit: {bad_return_value,true} 显然已经在client_session的 handle_info({tcp_closed,Socket},State) 中捕捉到了Socket断链信息。handle_info({tcp_closed,Socket},State)-> io:format("client sockt closed ~n"), chat_room:logout(State) 阅读全文

posted @ 2012-02-25 13:01 心笑峰 阅读(1372) 评论(0) 推荐(0) 编辑

2012年2月24日

Erlang 聊天室程序( 一)

摘要: 为了熟悉Erlang的套接字编程开始编写一个“聊天室”程序。基本流程如下: 1.服务器启动监听指定端口 2.启动一个gen_server 作为聊天室进程,里面使用ets 保持当前所有客户端连接信息,并负责将某个客户端的消息广播到所有在线客户端 3.服务器接受客户端连接,并绑定到一个gen_server进程 4.客户端维护进程接受客户端发送的消息,调用聊天室进程函数进行广播 5.客户端维护进程接受聊天室发送的消息,转发给客户端 客户端信息包括id、pid、socket、nickname、sex、age、province 等。 目前包括以下几个模块: echatServer.erl :服务器端程. 阅读全文

posted @ 2012-02-24 16:01 心笑峰 阅读(4214) 评论(4) 推荐(4) 编辑

Erlang gen_server:start_link/3 和gen_server:start_link/4

摘要: 两个方法都可以用来启动一个gen_server服务器进程,具体的参数如下: gen_server:start_link(Module,Args,Option); gen_server:start_link(ServerName,Module,Args,Option); 第二个方法只比第一个多了个ServerName,在gen_server的源码中区别如下:start_link(Mod, Args, Options) -> gen:start(?MODULE, link, Mod, Args, Options). start_link(Name, Mod, Args, Options... 阅读全文

posted @ 2012-02-24 11:32 心笑峰 阅读(4104) 评论(1) 推荐(0) 编辑

2012年2月17日

Erlang mnesia(一) 生成sequence 查错过程

摘要: 整了段代码,想用mnesia数据库来实现类似于Oracle中sequence 的功能。原代码如下:%% Author: Administrator %% Created: 2012-2-16 %% Description: TODO: Add description to id_generator -module(id_generator). -behavior(gen_server). %% %% Include files %% %% %% Exported Functions %% -export([start_link/0,getnewid/1]). -export([init/1.. 阅读全文

posted @ 2012-02-17 17:57 心笑峰 阅读(522) 评论(0) 推荐(0) 编辑

2012年2月16日

Erlang 从URL中截取尾部文件名

摘要: 分析项目edownloader时看到的代码: 从 “http://www.aaaa.com.cn/download/bbb/ccc.exe” 中截取ccc.exeuri.hrl-record(uri, {scheme, %% "http", "ftp" user_info="", %% [] | "srp" host="", %% "somewhere.net" port="", %% [] | 80 | 8080 path="", . 阅读全文

posted @ 2012-02-16 16:02 心笑峰 阅读(901) 评论(0) 推荐(0) 编辑

Erlide 的安装使用

摘要: erlang 开发平台很少,做JAVA开发的人做erlang开发,肯定会怀念eclipse中的快捷键操作,配置调试,语法高亮等。Erlide则是这么一款基于eclipse 的erlang开发插件,目前的版本是0.13.9 安装步骤如下: 1.安装erlang开发环境(版本至少为R13B-5) 2.安装eclipse 3.eclipse-->help--->install new Software ,填入http://www.erlide.org/update 安装。展开获取的安装项,里面会有Erlang add-ins、Erlang IDE 和Erlang optional add 阅读全文

posted @ 2012-02-16 12:10 心笑峰 阅读(3831) 评论(0) 推荐(0) 编辑

2012年2月9日

fqueue(二)

摘要: 上一篇blog分析了fqueue 的数据存储层的实现。这篇主要分析通信部分。fqueue使用jmemcached做为通信层,jmemcached与客户端的交互使用netty框架。 主要的类如下: startNewQueue:启动类,每new一个instance 都会启动一个监听了相应端口的服务。 MemCacheDaemon:负责通信的管理,包括调用netty建立监听,接受连接等,这里会根据交互数据格式的不同选择处理二进制数据或字符数据。 CacheImpl:对Cache接口的具体实现,使用FSQueue做为实际的数据存储层。 MemcachedCommandHandler:对netty收到. 阅读全文

posted @ 2012-02-09 21:02 心笑峰 阅读(1454) 评论(0) 推荐(0) 编辑

2012年2月8日

MySQL索引(一)

摘要: 数据库开发中索引的使用占了很重要的位置,好的索引会使数据库的读写效率加倍,烂的索引则会拖累整个系统甚至引发灾难。 索引分三类: index ----普通的索引,数据可以重复 unique ----唯一索引,唯一索引,要求所有记录都唯一 primary key ----主键索引,也就是在唯一索引的基础上相应的列必须为主键 一般的创建索引的语句如下: ALTER TABLE tb_name ADD INDEX index_name (column_list) ALTER TABLE tb_name ADD UNIQUE index_name (column_list) ALTER T... 阅读全文

posted @ 2012-02-08 18:47 心笑峰 阅读(7407) 评论(0) 推荐(0) 编辑

2012年2月7日

内存映射文件

摘要: 使用内存映射文件可以访问和修改那些超过机器内存大小而无法完全加载到内存的文件。MappedByteBuffer 可以将文件映射到内存中(不一定是物理内存),然后像使用数组般访问。 构建方法:MappedByteBuffer buf = new RandomAccessFile("file","rwd").getChannel().map(MapMode.READ_WRITE,0,length); 从java.nio.ByteBuffer,java.lang.Object继承的方法: get,getChar,getDouble,getFloat,getIn 阅读全文

posted @ 2012-02-07 17:19 心笑峰 阅读(368) 评论(0) 推荐(1) 编辑

fqueue 消息队列(一)

摘要: fqueue 是国内开发人员用JAVA开发的一款开源消息队列系统。消息队列可用来处理高并发量的数据库读写操作,降低数据库负载。fqueue的通信层使用了netty框架,数据存储则采用文件队列的方式。 存储层主要的类有以下几个: FQueue:主要的队列实现主类,所有的消息存储与读取都通过此类进行 FSQueue:FQueue的底层实现,主要是在文件队列系统层面的读写与管理控制 LogEntity:针对单个数据存储文件的操作类 LogIndex:索引文件控制类 整个存储队列关键的代码及功能如下: 1. 有专门的读和写操作句柄负责对当前存储文件的操作。 //当前写到的位置指针 private... 阅读全文

posted @ 2012-02-07 11:38 心笑峰 阅读(4721) 评论(0) 推荐(2) 编辑

2012年1月19日

日志系统引起的争论

摘要: 年前了事情还是有一大堆。最近我一直在思考“写代码”这事,如何摆脱小作坊、小玩具式的开发。如何能少走弯路、避免做无用功。 老板给提的建议是做事情要注重以下几点: 预见性:提前对项目作出预估、提前预见困难和陷阱。 计划性:计划和安排好达到目标的每一步。 执行力:任何事情都要有deadline,在规定的时间里完成规定的任务,并能对结果进行验证。 日志系统小到System.out.println,大到要使用hadoop等分布式文件系统存储都是项目中必不可少的一个模块。一个项目的日志系统要做到什么样的程度与项目本身的需求密切相关。如果是只想在编码期间看下程序运行是否正常,逻辑是否OK,直接用prin.. 阅读全文

posted @ 2012-01-19 18:32 心笑峰 阅读(274) 评论(0) 推荐(0) 编辑

SOCKS5协议

摘要: SOCKS5 是一个代理协议,这种协议对本身所代理的内容并不关心,可用于穿越防火墙。 例如我有一台web服务器,用户可以登陆上去查询公司的关键数据,这样的服务器我肯定是不想放到公网上让别人能随便访问,但是有时候我在外地又想登录上去。所以我就把这台服务器放置在内网,所有的对外接口由另外一台安装了防火墙的服务器提供。 我在这台有防火墙的服务器上安装SOCKS5代理服务器,并监听相应的端口,只有验证通过的数据才可以通过代理服务器然后转发到内网中的web服务器。 通过SOCK5代理服务器通信包括以下几个步骤: 1.客户连接代理服务器,提供自身支持的验证方法列表 2.代理服务器通知自己选择的验证方法(. 阅读全文

posted @ 2012-01-19 16:54 心笑峰 阅读(373) 评论(1) 推荐(0) 编辑

导航