generated from root/miduo_server
双重校验注册
parent
f28de9e226
commit
3f28e276fc
|
@ -13,7 +13,8 @@ import javax.servlet.ServletException;
|
|||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -151,32 +152,38 @@ public class GetUserController extends HttpServlet {
|
|||
int uid = 0;
|
||||
//加分布式锁
|
||||
List<DBObject> userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject);
|
||||
try{
|
||||
if (userInfos.size() == 0) {
|
||||
try{
|
||||
boolean getLock=false;
|
||||
while(!getLock){
|
||||
getLock = BaseGlobal.getInstance().redisApp.tryGetDistributedLock(RedisKey.REGISTER_LOCK, "", "get", 800);
|
||||
if (getLock&&userInfos.size() == 0) {
|
||||
DBObject next = server_info.iterator().next();
|
||||
Object register_state = next.get("register_state");
|
||||
if(register_state!=null&& register_state.equals("0")){
|
||||
returnErrorToFront(res,response,"该服务器已停止注册,请选择其他服务器游戏");
|
||||
return;
|
||||
while(!getLock){
|
||||
getLock = BaseGlobal.getInstance().redisApp.tryGetDistributedLock(RedisKey.REGISTER_LOCK, "", "get", 800);
|
||||
if(getLock){
|
||||
userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject);
|
||||
//双重校验
|
||||
if (userInfos.size() == 0) {
|
||||
DBObject next = server_info.iterator().next();
|
||||
Object register_state = next.get("register_state");
|
||||
if(register_state!=null&& register_state.equals("0")){
|
||||
returnErrorToFront(res,response,"该服务器已停止注册,请选择其他服务器游戏");
|
||||
return;
|
||||
}
|
||||
uid = BaseGlobal.getInstance().mongoDBPool.inc("uid") + 10000000;
|
||||
dbObject.put("uid", uid);
|
||||
dbObject.put("_id", uid);
|
||||
userInfos.add(dbObject);
|
||||
if (gid != null && !gid.isEmpty()) {
|
||||
dbObject.put("gid", gid);
|
||||
}
|
||||
if (pid != null && !pid.isEmpty()) {
|
||||
dbObject.put("pid", pid);
|
||||
}
|
||||
BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, dbObject);
|
||||
}
|
||||
}
|
||||
uid = BaseGlobal.getInstance().mongoDBPool.inc("uid") + 10000000;
|
||||
dbObject.put("uid", uid);
|
||||
dbObject.put("_id", uid);
|
||||
userInfos.add(dbObject);
|
||||
if (gid != null && !gid.isEmpty()) {
|
||||
dbObject.put("gid", gid);
|
||||
}
|
||||
if (pid != null && !pid.isEmpty()) {
|
||||
dbObject.put("pid", pid);
|
||||
}
|
||||
BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, dbObject);
|
||||
}
|
||||
}finally {
|
||||
BaseGlobal.getInstance().redisApp.releaseDistributedLock(RedisKey.REGISTER_LOCK,"","get");
|
||||
}
|
||||
}finally {
|
||||
BaseGlobal.getInstance().redisApp.releaseDistributedLock(RedisKey.REGISTER_LOCK,"","get");
|
||||
}
|
||||
Random random = new Random();
|
||||
int utoken = Math.abs(random.nextInt());
|
||||
|
|
Loading…
Reference in New Issue