服务器端用户注册及MongoDB线程池连接问题测试

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中的连接问题

线程池中的线程每访问一次数据库都会占用一个连接,而且不会自动释放。因此不能在线程池中操作数据库,这样会导致连接数过多。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值