服务器开发-纠正之前的错误

最近一阵子没有更新Egret客户端的博客。这里要解释一下,是因为最近在忙着重写服务器。

为什么说是重写呢?之前封装了一个websocket的中间件,已经可以实现基本的ws通信了。但是最近和游戏那边的同事交流中发现之前对游戏服务器开发的认知错误。

错误有以下几点

  1. 服务器逻辑是单线程的。单线程逻辑更加简单,理论上不会出现数据错误问题
  2. 服务器逻辑是顺序执行的。意思就是每个客户端的请求必须按顺序去执行,不然会出现客户端处理混乱的情况

了解到这些之后,我重新设计了一下服务器的“架构” ,或许算不上架构,我就是怎么简单怎么搞。

这几天我做了以下几点:

  1. 写了一个简单的服务器主循环的结构
  2. 写了一个简单Ws连接异步处理,并抛给主循环处理逻辑和处理主循环发给前端的数据包
  3. 封装了一个简单的协议格式和做了一个简单的逻辑处理的结构
  4. 实现了基本的玩家和Ws的绑定,并做是用Attribute做了简单的身份验证,缓存了反射结果,提高了性能

差不多就是这些,看起来不多,但是对于第一次摸索着写游戏服务器的人来说,还是很费时间的。

最近收获:发现游戏服务器逻辑基本都是单线程(第一次觉得CPU性能这么强劲。。),数据库查询,文件操作等耗时的内容都是在异步线程处理。处理完成后,不能再异步线程操作主循环的数据。必须把查询处理的数据抛给主循环的队列,然后由主循环的线程来处理。一般这样的才能保证游戏服务器数据不错乱和性能兼顾。

网上关于游戏服务器开发的具体细节的文章太少了。感觉游戏服务器开发的程序员都不怎么写博客啊。。。

最后感谢坐我隔壁位的隔壁的东北老铁。我的每个问题都很仔细的给我做了解答,还给我翻出C++的代码看(虽然我看不大懂C++)。。。一段时间的交流下来,我现在口头禅都变成了:老铁,没毛病,双击666。。

最后东北老铁给我说其实快手的那种老铁666都是夸张了。。。

好了,就这样,服务器代码暂时不发出来,因为我发现还有很多完善的地方。后面能完成的跑出一个斗地主联网的游戏之后,我会发出来的。

最后希望有大兄弟能指出我的问题。

老铁,没毛病



原文地址:https://www.cnblogs.com/boxrice/p/9030599.html

时间: 2024-11-13 08:02:36

服务器开发-纠正之前的错误的相关文章

游戏服务器开发需要学习的技术

一,游戏服务器编程语言的选择 所谓的游戏服务器编程语言其实有很多,基本上任何一种语言都可以作为游戏服务器的编程语言.这需要根据自己游戏的类型和要求加以选择.比如C++,Java ,Erlang,go等等.目前我用过的只有C++和Java.但是以Java为主.所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系. Java目前作为游戏服务器开发语言已经很是普遍.但是大多数是作为页游或手游的服务器,而端游戏一般选择C++,因为端游对服务器的性能要求相对比较高一些.两种语言各有利弊.

Python服务器开发一:python基础

Python服务器开发一:python基础 Python(蟒蛇)是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上使用. [特点] 1 Python使用C语言开发,但是Python不再有C语言中的指针等复杂的数据类型. 2 Python具有很强的面向对象特性,而且简化了面向对象的实现.它消除了保护类型.抽象类.接口等面向对象的元素. 3 Python代码块使用空格或制表符缩进的方式分隔代码. 4 Python仅

linux后台服务器开发环境部署配置和验证(nginx+apache+php-fpm+FASTCGI(C/C++))

linux后台服务器开发环境部署配置 引言 背景 随着公司互联网业务的不断增多,开发环境变得越来越复杂,为了便于统一服务器端的开发部署环境,特制定本配置文档. 使用软件 CentOS 6.3(Linux version 2.6.32-279.el6.x86_64) gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) 本次配置 Nginx 1.5.8 Apache 2.4.7 php 5.3.26 目的 构造WEB前端技术架构,web前端的部署结构技术完全完成.

erlang 游戏服务器开发

http://blog.csdn.net/slmeng2002/article/details/5532771 最近关注erlang游戏服务器开发  erlang大牛写的游戏服务器值得参考 介绍本文以我的OpenPoker项目为例子,讲述了一个构建超强伸缩性的在线多游戏玩家系统.OpenPoker是一个超强多玩家纸牌服务器,具有容错.负载均衡和无限伸缩性等特性.源代码位于我的个人站点上,大概10,000行代码,其中1/3是测试代码. 在OpenPoker最终版本敲定之前我做了大量调研,我尝试了D

阿里云服务器开发总结(2014-08-25)

阿里云服务器开发总结(这2周工作总结) 1.阿里云暂时只提供C#和Java的sdk,所以需要编写C++代码去调用Dll,以前学习过DLL的显式链接和隐式链接使用两种方式,在工作中加强了对DLL的灵活使用,DLL还分为32位和64位,因为DLL导出的函数指针有32位和64位之分.所以要编译32位和64位下不同版本的DLL来供客户来使用. 2.学习了用C#编写COM组件,网上教程不少,几点注意事项, 2.1 所要导出的类必须为公有 2.2 要导出的属性.方法必须使用接口方式,如果没有在接口中声明,即

昨天服务器上的IIS出现“服务器应用程序不可用”错误。经历半天,终于解决。

昨天下午服务器IIS上挂载的ASP.NET站点全部出现"服务器应用程序不可用"错误,期间服务器未作任何改动. 服务器:windows server 2003 IIS:6.0 ASP.NET:3.5 之前系统运行两年有余从未发生过类似情形,搜过了网上的各种解决办法都未获得解决. =============================================================== 第一种: 在IIS中重新注册.net cd c:\windows\microsoft

服务器开发-对外接口返回数据-封装模板

服务器开发-对外接口返回数据-封装模板 天马行空LQ 关注 1.3 2018.12.15 15:21* 字数 491 阅读 345评论 0喜欢 17赞赏 1 前言: 日常开发中我们一般都会做对外接口的统一数据返回模板,以下是我所采用的数据返回模板,分享出来目的是欢迎大家学习和帮助改进. 以下,Enjoy: DataResult.java(数据模板类): /** * @Auther: 折戟沉沙 * @Description: 接口返回 数据模板 * @Version: 1.0 */ public

配置接口配置文件 明确指出错误信息(“/”服务器上出现应用程序错误)

开发环境:.net 其实这类问题(如下图)之前已经断断续续遇见过几次 但是每次都是不太上心或者已经知道错误出在哪里,但是类似于下图中这种莫名其妙的描述,排查起来较为困难 此时需要在配置文件中设置节点,将错误信息明确指出来,以便排错 “/”应用程序中的服务器错误. 运行时错误 说明: 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因).但可以通过在本地服务器计算机上运行的浏览器查看. 详细信息: 若要使他人能够在远程计算机上查看此特定错误信息

全栈项目|小书架|服务器开发-Koa2 全局异常处理

什么是异常 做开发的基本都知道异常,像Android开发中常见的ANR异常.空指针异常,服务器开发中经常遇到的异常404,500异常,还有一些其他常见的异常,具体可见HTTP状态码. 基本上这些异常可以总结为:已知异常和未知异常. 已知异常就是程序中能够预想到异常,比如:服务器接口开发中某个api接口需要5个参数,而用户传递的参数多余5个或者少于5个,这种错误就是已知错误. 未知异常就说程序中不能预想到的异常,比如:服务器接口开发中遇到了空指针而程序中又没有做相应处理就会抛出HTTP状态码为50