02 2012 档案

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 心笑峰 阅读(801) 评论(0) 推荐(0) 编辑

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 心笑峰 阅读(1576) 评论(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 心笑峰 阅读(1414) 评论(0) 推荐(0) 编辑

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 心笑峰 阅读(1373) 评论(0) 推荐(0) 编辑

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 心笑峰 阅读(4221) 评论(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 心笑峰 阅读(4105) 评论(1) 推荐(0) 编辑

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) 编辑

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 心笑峰 阅读(903) 评论(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 心笑峰 阅读(3837) 评论(0) 推荐(0) 编辑

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) 编辑

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 心笑峰 阅读(7408) 评论(0) 推荐(0) 编辑

内存映射文件
摘要:使用内存映射文件可以访问和修改那些超过机器内存大小而无法完全加载到内存的文件。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 心笑峰 阅读(369) 评论(0) 推荐(1) 编辑

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

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

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示