时间:2021-05-20
KBEngine 是一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互,
使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端。
服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新),开发者无需重复的实现一些游戏服务端通用的底层技术,
将精力真正集中到游戏开发层面上来,快速的打造各种网络游戏。
(经常被问到承载上限,kbengine底层架构被设计为多进程分布式动态负载均衡方案,
理论上只需要不断扩展硬件就能够不断增加承载上限,单台机器的承载上限取决于游戏逻辑本身的复杂度。)
cstdkbe.hpp
/*This source file is part of KBEngineFor the latest info, see http://PONENT_TYPE}; typedef int8 CLIENT_CTYPE; // 前端是否支持浮点数// #define CLIENT_NO_FLOAT // 一个cell的默认的边界或者最小大小#define CELL_DEF_MIN_AREA_SIZE 500.0f /** 一个空间的一个chunk大小 */#define SPACE_CHUNK_SIZE 100 /** 检查用户名合法性 */inline bool validName(const char* name, int size){ if(size >= 256) return false; for(int i=0; i<size; i++) { char ch = name[i]; if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || (ch == '_')) continue; return false; } return true;} inline bool validName(const std::string& name){ return validName(name.c_str(), name.size());} /** 检查email地址合法性 严格匹配请用如下表达式[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?*/#ifdef USE_REGEX#include <regex>#endif inline bool email_isvalid(const char *address) {#ifdef USE_REGEX std::tr1::regex _mail_pattern("([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)"); return std::tr1::regex_match(accountName, _mail_pattern);#endif int len = strlen(address); if(len <= 3) return false; char ch = address[len - 1]; if(!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9'))) return false; int count = 0; const char *c, *domain; static const char *rfc822_specials = "()<>@,;:\\\"[]"; for (c = address; *c; c++) { if (*c == '\"' && (c == address || *(c - 1) == '.' || *(c - 1) == '\"')) { while (*++c) { if (*c == '\"') break; if (*c == '\\' && (*++c == ' ')) continue; if (*c <= ' ' || *c >= 127) return false; } if (!*c++) return false; if (*c == '@') break; if (*c != '.') return false; continue; } if (*c == '@') break; if (*c <= ' ' || *c >= 127) return false; if (strchr(rfc822_specials, *c)) return false; } if (c == address || *(c - 1) == '.') return false; if (!*(domain = ++c)) return false; do { if (*c == '.') { if (c == domain || *(c - 1) == '.') return false; count++; } if (*c <= ' ' || *c >= 127) return false; if (strchr(rfc822_specials, *c)) return false; } while (*++c); return (count >= 1);} }#endif // KBE_CSTDKBE_HPP以上所述就是本文的全部内容了,有需要的小伙伴可以参考下。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Impyla是用于分布式查询引擎的HiveServer2实现(如Impala、Hive)的python客户端1)安装impylapipinstallimpyla
本系列将和大家分享Redis分布式缓存,本文是该系列的开篇,主要简单介绍下Redis客户端及服务端的安装。一、Redis简介Redis:RemoteDictio
分布式消息通道广泛应用在很多公司,尤其是在移动App和服务端需要上传、推送大量的数据和消息时。比如打车App每天要上传大量的位置信息,服务端也有很多订单要及时推
数据存储区。AppEngine提供了一个强大的分布式数据存储服务,其中包含查询引擎和事务。就像分布式网络服务器随通信量增长一样,分布式数据存储区也随数据而增长。
java操作mongo查询的实例详解前言:MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。