热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何为Unity3d设计我的在线游戏服务器?

如何解决《如何为Unity3d设计我的在线游戏服务器?》经验,为你挑选了1个好方法。


最近,我一直在unity3d做多人游戏开发.我已经很好地了解了Unity的MasterServer如何协同工作.
但现在我想从头开始制作自己的游戏服务器.我研究并了解我们可以使用Google云计算和应用引擎来制作我们自己的配对服务器和游戏主机服务器.
但我完全无能为力,我们如何开始编码我的服务器.我们使用简单的http请求和json结果吗?或者还有其他技术可以实时与FPS类型的游戏一起使用.我不认为发送http请求并等待它的结果可以足够快,可以在FPS类型的游戏中工作,每秒我们发送超过100个数据.
起初我想过编写php脚本并将其托管到某个url,然后向该url发送请求并等待其响应.但我发现,如果我使用这个过程然后从服务器获得一个响应,它将花费我至少0.5秒或更多.在这种情况下,游戏会有很多延迟.
我知道游戏服务器可以在某种tcp或udp网络上运行.但我的问题是,我应该为服务器提供什么样的应用程序来接收这些数据并快速发送处理结果.



1> Programmer..:

首先,我认为您将MasterServer与在游戏过程中发送和接收游戏数据所需的连接混淆.

MasterServer用于检索创建游戏的服务器的信息,如IP地址和端口号.检索IP和端口号后,客户端可以使用这些信息直接连接到服务器.

我们使用简单的http请求和json结果吗?

对于MasterServer,是的,你可以.您还可以将它与PHP结合使用,以保存数据库上的游戏会话.

例如,当玩家想要创建一个新游戏时,你会带你的游戏信息,如游戏名称,密码,最大玩家,玩家的IP地址,端口号,然后将其序列化为json并使用RESTful发送.

您可以使用PHP接收该游戏信息并将其存储到服务器中,以便其他玩家可以找到它.

这不应该影响性能,因为您只使用它来创建,查询和破坏游戏季节.在游戏过程中,您没有使用它来发送游戏数据.


至于在游戏过程中发送数据,你可以使用raw socket.使用C#的 TCP或UDP .入乡随俗用C++用,如果你想获得正弦统一的UNET被写入工作在最大性能C++.大多数FPS服务器都是用C++编写的,这是为了确保它们获得最高性能.

请记住,有许多类型的服务器,所以我不能在这篇文章中涵盖所有这些服务器.我将专注于MasterServer,它告诉客户端创建的游戏上的IP地址,然后在无法建立玩家之间的直接连接时使用的中继.

我建议你使用谷歌的Protobuf而不是Json的性能和轻量级.如果您发现任何比Protobuf更快的序列化API,那么请使用它.

直接连接:

服务器:

1.使用 Nat执行端口转发.

2.通过创建TCP/UDP服务器创建游戏.

3.将游戏信息(游戏名称,IP,端口号)发送到MasterServer.

4.当客户端连接该信息时,通过使用Protobuf send 将数据(FPS播放器位置?)序列化到客户端来开始发送数据.

5.当您从客户端接收数据时,使用Protobuf对其进行反序列化.

客户:

1.连接到MasterServer并检索正在运行的游戏信息.

2.创建TCP/UDP客户端并连接到其中一个IP和端口号.

要发送和接收数据,请使用Server #4#5中的步骤.


有时,端口转发在某些设备上不起作用.在这种情况下,具有不同全局IP地址的两个玩家无法连接在一起,这就是继电器和C++发挥作用的地方.应该使用http请求,json或php完成中继.它应该用C++或类似的快速语言如python制作.

同样,有很多方法可以做到这一点.最简单的方法是为每个创建的游戏生成私钥.当服务器/客户端彼此发送数据时,它们必须在该数据中包含此密钥,并且此密钥将用于确定中继服务器应将数据发送给谁.

与继电器连接:

服务器:

1.通过连接将游戏信息(游戏名称)发送到MasterServer来创建游戏.

2.MasterServer通过生成私钥并将其返回到服务器来响应.

3.使用该私钥连接到中继服务器.

4.要向其他玩家发送数据,用Protobuf序列化数据(FPS播放器位置?)然后发送到中继服务器.该数据还必须包含私钥.

5.中继服务器从该服务器接收数据,读取私钥并使用相同的私钥将数据转发/发送到任何其他客户端.

6.当您从其他播放器发送的中继服务器接收数据时,使用Protobuf对其进行反序列化.

只要连接仍然存在并且游戏仍未结束,重复从#4#6.

客户:

1.连接到MasterServer并检索正在运行的游戏信息.

2.MasterServer通过将该游戏的私钥返回给客户端来响应.

3.使用该私钥连接到中继服务器.

4.要向其他玩家发送数据,用Protobuf序列化数据(FPS播放器位置?)然后发送到中继服务器.该数据还必须包含私钥.

5.中继服务器从该服务器接收数据,读取私钥并使用相同的私钥将数据转发/发送到任何其他客户端.

6.当您从其他播放器发送的中继服务器接收数据时,使用Protobuf对其进行反序列化.

只要连接仍然存在并且游戏仍未结束,重复从#4#6.


推荐阅读
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • 1223  drf引入以及restful规范
    [toc]前后台的数据交互前台安装axios插件,进行与后台的数据交互安装axios,并在main.js中设置params传递拼接参数data携带数据包参数headers中发送头部 ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • 介绍一款好用的内网穿透工具FRP
    本文介绍了一款好用的内网穿透工具FRP,它是一个使用Go语言开发的高性能的反向代理应用。FRP支持多种协议类型,并且可以根据域名进行路由转发。 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • c# java socketn 字节流_C#Socket编程详解(一)TCP与UDP简介
    一、TCP与UDP(转载)1、TCP1.1定义TCP(TransmissionControlProtocol)传输控制协议。是一种可靠的、面向连接的协议(eg:打电话)、传输效率低 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
author-avatar
youstar
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有