`
yjl49
  • 浏览: 109989 次
社区版块
存档分类
最新评论
文章列表
接下来实现设置客户端信息功能,使客户端可以设置自己的名称、性别、年龄、所做省份等信息。我们暂时不管客户端如何实现,先对服务器端代码进行调整。 这里需要做以下几件事: 1.修改client_session中handle_info({tcp,Socket,Data},State) 函数对接收到的消息包的处理,使其能支持“客户端信息设置消息”。 考虑到后面还会有更多种类的消息,在这里添加一个消息路由模块message_router.erl,主要负责验证收到的消息类型和主题,并最终路由到正确的消息处理模块中去。 2.将chat_room中的客户端信息管理代码独立为一个client_ma ...
上一篇实现了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)-> ...
霸哥的blog中提到过Erlang服务器在通信中与客户端的数据交换方式:yufeng 为了简单起见这个聊天室程序采用json,要使用到rfc4627 这个库 先定义一个Message类:   public class Message { String id; //消息ID String type; //消息类型 String from; //发送方 String to; //接收方 String subject; //主题 String content; //内容 Date creationDate; //时间 publi ...
接着上一篇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_ro ...
为了熟悉Erlang的套接字编程开始编写一个“聊天室”程序。基本流程如下: 1.服务器启动监听指定端口 2.启动一个gen_server 作为聊天室进程,里面使用ets 保持当前所有客户端连接信息,并负责将某个客户端的消息广播到所有在线客户端 3.服务器接受客户端连接,并绑定到一个gen_server进程 4.客户端维护进程接受客户端发送的消息,调用聊天室进程函数进行广播 5.客户端维护进程接受聊天室发送的消息,转发给客户端   客户端信息包括id、pid、socket、nickname、sex、age、province 等。 目前包括以下几个模块: echa ...
两个方法都可以用来启动一个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, ...
整了段代码,想用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]). - ...
分析项目edownloader时看到的代码: 从 “http://www.aaaa.com.cn/download/bbb/ccc.exe” 中截取ccc.exe uri.hrl-record(uri, {scheme, %% "http", "ftp" user_info="", %% [] | "srp" host="", %% "somewhere.net" ...
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 opti ...

fqueue(二)

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

MySQL索引(一)

    博客分类:
  • DB
数据库开发中索引的使用占了很重要的位置,好的索引会使数据库的读写效率加倍,烂的索引则会拖累整个系统甚至引发灾难。 索引分三类: index ----普通的索引,数据可以重复 unique ----唯一索引,唯一索引,要求所有记录都唯一 primary key ----主键索引,也就是在唯一索引的基础上相应的列必须为主键 一般的创建索引的语句如下:   ALTER TABLE tb_name ADD INDEX index_name (column_list)   ALTER TABLE tb_name ADD UNIQUE index_name (colu ...
使用内存映射文件可以访问和修改那些超过机器内存大小而无法完全加载到内存的文件。MappedByteBuffer 可以将文件映射到内存中(不一定是物理内存),然后像使用数组般访问。 构建方法: MappedByteBuffer buf = new RandomAccessFile("file","rwd").getChannel().map(MapMode.READ_WRITE,0,length); 从java.nio.ByteBuffer,java.lang.Object继承的方法:   get,getChar,getDouble,g ...
fqueue 是国内开发人员用JAVA开发的一款开源消息队列系统。消息队列可用来处理高并发量的数据库读写操作,降低数据库负载。fqueue的通信层使用了netty框架,数据存储则采用文件队列的方式。 存储层主要的类有以下几个: FQueue:主要的队列实现主类,所有的消息存储与读取都通过此类进行 FSQueue:FQueue的底层实现,主要是在文件队列系统层面的读写与管理控制 LogEntity:针对单个数据存储文件的操作类 LogIndex:索引文件控制类 整个存储队列关键的代码及功能如下: 1. 有专门的读和写操作句柄负责对当前存储文件的操作。   / ...
  年前了事情还是有一大堆。最近我一直在思考“写代码”这事,如何摆脱小作坊、小玩具式的开发。如何能少走弯路、避免做无用功。 老板给提的建议是做事情要注重以下几点: 预见性:提前对项目作出预估、提前预见 ...

SOCKS5协议

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