1.完成服务器用户注册模块的开发。
2.测试MongoDB在netty线程池OrderedMemoryAwareThreadPoolExecutor中的连接问题
主要测试当线程池中的线程使用完后系统是将其缓存以待下次使用还是将其销毁以后在创建新的线程。
今日总结
1.学会如何在在MongoDB中使用存储过程
MongoDB中的存储过程是基于js,所以使用起来是还是很方便;首先定义个js文件(名字为regist.js)内容格式如下
db.system.js.save({_id:"user_regist", value:function(account, password, ver_code
, socket_id, nick_name, sex, score, money){
//返回0表示操作成功, 1005:帐号或密码为空, 1006:帐号或密码不合法, 1007:用户帐号已存在,不能注册
if(null == account || null == password){
return 1005;
}
....
return 0;
}});
然后通过命令 mongo 数据库名称 -u 用户名 -p 密码 登录到数据库中执行如下命令将存储过程载入数据库
load("regist.js")
之后就可以执行 user_regist存储过程了
db.eval('user_regist("sssss@163.com", "123456", 1004, 100, "娃娃",1,100,500)');
2.java 执行Mongodb 存储过程
CommandResult cmdResult = database.doEval("user_regist('siqiang0312@163.com', '123456',100,-1055413314,'哈哈',0,0,100)");
在这个过程中遇到一个问题,doEval()中的命令即使写错cmdResult.ok() 依然为true;暂时不知道问题出在哪里。
3.java 执行MongoDB update()操作
collection.update(
new BasicDBObject(ConstantEnum.SOCKET_ID, e.getChannel().getId())
, new BasicDBObject(ConstantEnum.SOCKET_ID, 0))
, false ,false);
该方式会删除该字段中除了_id 和 SOCKET_ID字段以外的其他字段。
正确的方式如下
collection.update(
new BasicDBObject(ConstantEnum.SOCKET_ID, e.getChannel().getId())
, new BasicDBObject("$set", new BasicDBObject(ConstantEnum.SOCKET_ID, 0))
, false ,false);
4.测试MongoDB在netty线程池OrderedMemoryAwareThreadPoolExecutor中的连接问题
线程池中的线程每访问一次数据库都会占用一个连接,而且不会自动释放。因此不能在线程池中操作数据库,这样会导致连接数过多。