- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是游戏服务器设计的新手,现在分配了一项任务来重构我们的日志服务器。我为游戏服务器和日志服务器之间的通信创建了一个类日志。
class Log
{
public:
void encode(Encoder& encoder) const;
int decode(Decoder& decoder);
private:
std::string sql_cmd;
}
在游戏服务器上,有一个向日志服务器发送日志请求的类。
class LogHelper
{
public:
static void LogItemChange(const GameShare::GameItem& item, const PackageChangeDetails& pcd);
{
Log log(get_item_change_sql(item,pcd);
send_to_log_server();
}
private:
static std::string get_item_change_sql(const GameShare::GameItem& item, const PackageChangeDetails& pcd);
}
问题是:
我应该在游戏服务器上生成 sql 文本吗?如果在游戏服务器上生成sql文本,对游戏服务器的性能有影响吗?
如果不在游戏服务器上生成sql文本,那么应该在日志服务器上生成sql文本。我应该将 GameItem 和 PackageChangeDetails 实例数据发送到日志服务器,这会使日志服务器复杂化,有人有好主意吗?
最佳答案
如果日志的 SQL 是由游戏服务器生成的,那么几乎不需要任何日志服务器代码,因为它成为数据库管理器部分的通路,游戏服务器几乎肯定已经知道(尽管我想它们可能是不同的数据库),或者可以很容易地与之交互。
Log Server 应该是一个单独的组件,以您最方便的任何格式(性能、冗长、大小等)记录日志,只要 API 足够灵活,就可以编写底层实现可以在游戏服务器不知情的情况下被替换。
通过将底层实现的完整知识与游戏服务器代码相结合,您不仅可以防止 future 的此类工作,而且还可能将大量工作放入游戏服务器的代码中,而这些工作本可以由一个单独的线程完成日志服务器。更不用说,通过向 SQL 开放 API,您将潜在的错误置于整个游戏服务器代码中,否则这些错误将被集中。
在设计面向对象的系统时,前瞻性的、替换驱动的方法是理想的。如果你能避免耦合到 API 以外的任何东西,那么你总是可以替换 API 下的任何东西而不影响外部代码(忽略错误),但这需要考虑到 API 中以确保它具有足够的灵 active 以应对 future .
关于这一点,我强烈建议您将 Logging API 实现为一个纯虚拟接口(interface),然后在其之上编写一个与数据库对话的实现,可能还有一个单独的实现将日志记录到一个文本文件(例如方便的本地测试,无需访问数据库,如果这曾经是一个问题)以及无所事事的实现。记住前两个,它应该有助于指导您进行更好的设计,并避免耦合。
这也可能导致您的其他类实现的一些基本接口(interface)(例如,public: std::string to_log_string() const;
),然后 Logger 可以使用它来引入任何实现对象并快速将其转换为记录的消息。
所有这些就是说,将日志记录相关的 SQL 放在 Log Server 中,而不是放在 Game Server 中。游戏服务器不应该关心日志服务器除了一般的“日志记录”之外做了什么。
关于c++ - 为 MMO 游戏设计日志服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12256594/
我曾尝试搜索如何制作 MMO 并总是找到相同的回复,这是不可能的或需要很多钱,但从未给出如何制作的指南。 我想构建一些非常可扩展的东西,我目前关于如何构建 MMO 的想法如下: 成分: 登录服务器:客
我正在制作一款拥有 2d 世界的 MMO。 (这是一个学习项目,所以不要试图说服我放弃它 :) 我想为它试验一个新的数据存储,并且我读过关于 redis 的好东西。我已经完成了这些教程,我想我开始了解
我们正在构建一个 HTML5 MMO,它将利用对用 Python 编写的 REST API 的 AJAX 调用来执行操作(购买、出售、构建、交易、发送、攻击)。 我们这个项目的第二部分是一个 Java
我试着理解,mmo怎么了目标文件格式有效,用于 Don Knuth 的教育MMIX建筑学。我没有买MMIXware,所以大部分细节只能从汇编器和模拟器的文字源文件中猜测。 对象格式使用特殊的三元搜索树
申请 我正在开发一款 MMO,但遇到了一个问题。我构建的 MMO 服务器速度很快,并且在 UDP 套接字上每隔约 50 毫秒就在本地向我的游戏客户端发送消息。这是通过我当前的消息系统从服务器到客户端的
我正在做一个服务器项目(我想用它制作一个 MMO 服务器)。我已经创建了一些东西,但 IDK 是一个很好的系统吗?即是否有用于创建(帮助!)高性能套接字服务器 (MMO) 的 MMO 服务器教程/书籍
我在 gamedev.stackexchange.com 上问过这个问题,但一无所获。如果我做错了,请修复标签 这类游戏需要什么“东西”?我非常了解 java、c++、javascript 和 obj
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,vis
我正在开发一个在线浏览器游戏,基于谷歌地图,使用 Django 后端,我已经接近需要决定如何实现(后端)定时事件的地步 - 即 NPC 拥有数量提高(例如,城市人口的增长应基于一些变量——城市规模、应
我是游戏服务器设计的新手,现在分配了一项任务来重构我们的日志服务器。我为游戏服务器和日志服务器之间的通信创建了一个类日志。 class Log { public: void
假设您有一个服务器权威的多人在线游戏(服务器对游戏中发生的事情有最终决定权,客户端只渲染图形并接受用户输入并将其提供给服务器)。 如果您在一个区域中有 X 个玩家并且彼此相邻,在彼此可见的情况下,服务
因此,假设有一款游戏包含一个网站,以及一个您可以从该网站启动的客户端。我看了一下,一个相关的例子是 Habbo Hotel。 我要问的是,让这样的游戏运行的所有不同部分是什么:对于网站部分,我想需要一
我正在使用以下技术和语言编写 MMO 服务器:.Net Framework 4、C#、SQL Server 2008 R2、实体数据模型、LINQ。 我的问题是关于如何以及何时访问用户状态数据的永久存
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 2 年前。 Improv
因此,我将在规划阶段使用 javacript 和 HTML 在 Canvas 中创建游戏,但是我开始想知道如何处理多个用户在同一个“ Canvas ”上编辑和玩的情况 为了描述我的问题,我想告诉你一些
我正在开发一款类似于游戏的 MMO 射击游戏 Realm of the Mad God在 Python 2.7 中。 游戏的玩家数据将包括游戏中每个玩家所佩戴的装备、玩家的姓名等,这样当他们注销角色时
我正在尝试用 Java 制作在线 MMO。这将是一个简单的游戏,您可以在其中获得一个角色并可以四处移动并射击其他玩家,所有这些都是自上而下的 2D 游戏。服务器将是多线程的并且使用 Java,客户端也
我目前正在构建一个简单的 MMO 游戏,供用户聊天、玩游戏等简单的事情。 我已经使用node.js和socket.io构建了服务器,并使用Phaser.js构建了客户端,但我担心(基于之前有人告诉我我
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this qu
我一直在写一个 2D Flash 多人游戏和一个套接字服务器。我最初的客户端和服务器之间的移动算法计划如下: 每当这些改变时,客户端通知服务器关于玩家的移动模式(向前移动或不移动)和玩家的转向模式(不
我是一名优秀的程序员,十分优秀!