精华内容
下载资源
问答
  • OHishiapply / ShutterstockOHishiapply / ShutterstockWhile you could host a game server on your PC, sometimes it’s more convenient to have a cloud server running 24/7. Game server hosting can be ...
    Multiple gaming computers
    OHishiapply / ShutterstockOHishiapply / Shutterstock

    While you could host a game server on your PC, sometimes it’s more convenient to have a cloud server running 24/7. Game server hosting can be surprisingly cheap, especially if you’re just looking to play with a few friends.

    尽管您可以在PC上托管游戏服务器,但有时更方便的是运行24/7的云服务器。 游戏服务器托管的价格可能出奇的便宜,特别是如果您只是想和几个朋友一起玩。

    专用与共享托管 (Dedicated vs. Shared Hosting)

    Dedicated hosting is when you rent out an entire rack of a server—or, often, a portion of that rack’s resources. You’ll often be given detailed specifications about what exactly you’re buying, and you’ll generally be paying a bit extra compared to shared hosting.

    专用托管是指您租用整个服务器机架(或通常是该机架资源的一部分)时。 通常会为您提供有关要购买的商品的详细说明,并且与共享主机相比,您通常会多花一些钱。

    Shared hosting runs multiple instances of a game server across multiple server racks, allowing the hosting provider to save money and provide a low price. However, it’s not always clear what specs you’re getting, and you can run into congestion issues if your server suffers heavy load.

    共享主机在多个服务器机架上运行游戏服务器的多个实例,从而使主机提供商可以节省资金并提供低廉的价格。 但是,并不总是很清楚您所获得的规格,如果服务器承受沉重的负担,您可能会遇到拥塞问题。

    If you’re looking to set up a server for you and a couple of friends, we recommend you save some money and get shared hosting. If you’re looking to have a lot of people playing on your server, you should try shared hosting first and upgrade to dedicated hosting if it’s necessary.

    如果您想为您和几个朋友设置服务器,建议您节省一些钱并获得共享主机。 如果您希望在服务器上玩很多人,则应首先尝试共享主机,并在必要时升级到专用主机。

    Depending on what provider you buy your server from, you may also get managed hosting, which is when the provider builds tools to set up, configure, and manage your server automatically, such as automatic restarts and easy mod installing.

    根据从哪个提供商那里购买服务器,您可能还会获得托管主机,这是提供商构建自动设置,配置和管理服务器的工具时,例如自动重启和轻松的mod安装。

    共享主机选项 (Shared Hosting Options)

    Managed game server hosting panel
    Nodecraft
    节点Craft.io

    All of the options listed here are also managed hosting. You won’t have to worry about setup too much, as it should be relatively straightforward or just handled for you completely.

    此处列出的所有选项也是托管主机。 您不必担心设置太多,因为它应该相对简单,或者完全为您处理。

    • Gameservers.com: Very cheap servers for small use cases, as you’re charged by the number of player slots you want. A decent control panel, but no DDOS protection.

      Gameservers.com :用于小型用例的非常便宜的服务器,因为您需要使用所需的玩家插槽数量来收费。 体面的控制面板,但没有DDOS保护。

    • Low.ms: A compromise between dedicated and shared hosting, while still providing a managed control panel for most games. You’ll know the specs you’re getting, but you’ll have to pay extra for a dedicated thread. They also put branding in your server title, which costs $2 to remove, but you might be fine with it if you’re trying to save some money.

      Low.ms :在专用托管和共享托管之间进行折衷,同时仍为大多数游戏提供托管控制面板。 您将了解所获得的规格,但是您必须为专用线程支付额外费用。 他们还会在您的服务器标题中加上商标,删除商标的费用为2美元,但是如果您想节省一些钱,可以选择使用商标。

    • Nodecraft: A shared hosting provider that doesn’t charge per slot. They have different tiers, segmented by RAM and the number of instances you can run. In fact, you can host multiple servers on one tier, RAM permitting.

      Nodecraft :一个共享的托管服务提供商,不按插槽收费。 它们具有不同的层,按RAM和您可以运行的实例数细分。 实际上,在RAM允许的情况下,您可以在一层上托管多个服务器。

    Whatever option you go with, make sure it has a managed control panel and supports the game you want.

    无论使用哪种选项,请确保其具有托管控制面板并支持所需的游戏。

    专用主机选项 (Dedicated Hosting Options)

    Dedicated hosting allows you a lot more freedom and control. You can host multiple game servers off one box, as well multiple different games, and since you have full access to the box, you can even host a web server to run a website off the server, or anything else non-game related.

    专用托管使您拥有更多的自由和控制权。 您可以将多个游戏服务器托管在一个盒子之外,也可以托管多个不同的游戏,并且由于您对该盒子具有完全访问权限,因此您甚至可以托管一个Web服务器以在该服务器之外运行网站,或其他任何与游戏无关的网站。

    • OVH: Only two locations, Canada and France, but offering very powerful servers for the price. If you don’t care about having the latest gen hardware, you can rent their old equipment from their sister company SYS. Both will be completely fresh servers, and you’ll have to set everything up yourself.

      OVH :只有两个地区,加拿大和法国,但以价格提供功能非常强大的服务器。 如果您不希望拥有最新的硬件,则可以从其姊妹公司SYS租用他们的旧设备。 两者都是完全新鲜的服务器,您必须自行设置所有内容。

    • Gameservers.com: Though this company focuses on shared hosting, it also offers dedicated servers as an option. You’ll even get the managed control panel, though this is optional and will restrict your access to only the control panel.

      Gameservers.com :尽管该公司专注于共享主机,但它也提供专用服务器作为选项。 您甚至会获得托管控制面板,尽管这是可选的,并且将限制您仅访问控制面板。

    • Amazon Web Services: More of a premium, enterprise option. If you’re a game developer looking to host servers, AWS GameLift is worth looking into. If you’re looking for a single, generic server, EC2 will be more suitable. And if you’re a student, you can get $100 in free credit with a .EDU email.

      Amazon Web Services :更多高级的企业选择。 如果您是希望托管服务器的游戏开发人员,则值得研究AWS GameLift 。 如果您正在寻找单个通用服务器,则EC2将更合适。 如果您是学生,则可以通过.EDU电子邮件获得$ 100的免费信用额

    设置专用服务器 (Setting Up a Dedicated Server)

    Steam Command Line

    Most Steam games will use SteamCMD to download and run the server, although you’ll usually have to configure a .bat file with all the starting instructions. Other games may have their own server program you can download—check the game’s official documentation for more information. We’ll link to a few guides here, but if you’re looking to run something that isn’t on this list, a quick web search for the game’s name plus “dedicated server setup” will usually yield useful results.

    大多数Steam游戏将使用SteamCMD下载并运行服务器,尽管通常您必须使用所有开始说明来配置.bat文件。 其他游戏可能拥有自己的服务器程序,您可以下载该服务器程序-有关更多信息,请查看游戏的官方文档。 我们将在此处链接到一些指南,但是,如果您要运行不在此列表中的内容,则快速在网络上搜索游戏名称以及“专用服务器设置”通常会产生有用的结果。

    After the server is set up and running, you’ll want to ensure that the ports are open on the server, so that people will be able to access it. This step will be different for each host, but if you don’t see anything in the control panel for your provider, you will likely just have to change the Windows Firewall settings and whitelist the server application.

    设置并运行服务器后,您需要确保在服务器上打开端口,以便人们可以访问它。 对于每个主机,此步骤将有所不同,但是如果您的提供商的控制面板中没有看到任何内容,则可能只需更改Windows防火墙设置并将服务器应用程序列入白名单。

    After the ports are open, people should be able to connect to your server with the IP address, or possibly just through the in-game server browser. Depending on the game, you might want to get a domain name for your server, so you can easily remember the IP address.

    打开端口后,人们应该可以使用IP地址或可能仅通过游戏内服务器浏览器连接到您的服务器。 根据游戏的不同,您可能希望获取服务器的域名,以便轻松记住IP地址。

    翻译自: https://www.howtogeek.com/406692/how-to-start-your-own-game-server/

    展开全文
  • 游戏服务器端框架----PhotonServer开发工具:Unity3d2017、VS2017、PhotonServer SDK首先到官网下载其SDK,下载地址服务器部署将下载下来的SDK...server:Demo源码接下来开始部署自己游戏服务器打开VS,新建类库在项

    本系列教程介绍游戏服务器端框架----PhotonServer

    原文地址:blog.liujunliang.com.cn

    开发工具:Unity3d2017、VS2017、PhotonServer SDK

    首先到官网下载其SDK,下载地址

    服务器部署

    将下载下来的SDK解压

    目录结构如下


    deploy:部署程序

    doc:文档

    lib:存放类库,在接下来的客户端(Unity3d)和服务器端开发需要引用到

    src-server:Demo源码


    接下来开始部署自己的游戏服务器

    打开VS,新建类库


    在项目中引用lib目录下的如下图五个类库



     在项目中新建入口类,这里命名为MyGameServer

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Photon.SocketServer;
    using System.IO;
    using ExitGames.Logging;
    using ExitGames.Logging.Log4Net;
    using log4net.Config;
    
    namespace MyGameServer
    {
        //服务器框架主类 框架入口
        class MyGameServer : Photon.SocketServer.ApplicationBase
        {
    
            //单例模式
            public static ILogger LOG = LogManager.GetCurrentClassLogger();
    
            //当有客户端接入时候调用
            protected override PeerBase CreatePeer(InitRequest initRequest)
            {
                return new ClientPeer(initRequest);
            }
    
            //当框架启动时候调用
            protected override void Setup()
            {
                
            }
    
            //当框架停止时候调用
            protected override void TearDown()
            {
                
            }
       


    新建客户端类,这里命名为ClientPeer

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Photon.SocketServer;
    using PhotonHostRuntimeInterfaces;
    
    namespace MyGameServer
    {
        class ClientPeer : Photon.SocketServer.ClientPeer
        {
            public ClientPeer(InitRequest ir) : base(ir) { }
    
            //该客户端断开连接
            protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
            {
                
            }
    
            //该客户端出操作请求
            protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
            {
                
            }
        }
    }
    


    这里一个简单的服务端程序写好了,在PhotonServer的depoly目录下新建一个文件夹,这里命名为MyGame,再创建一个子目录,命名为bin

    在右键项目->属性,将项目生成路径配置到刚刚创建的bin目录下




     右键项目->点击生成



    在MyGame->bin目录下生成执行程序


    配置文件:在bin_Win64打开PhontonServer.config文本文件(XML)



    打开配置文件,发现里面有两个示列程序,复制粘贴一个做为自己的


    <?xml version="1.0" encoding="Windows-1252"?>
    <!--
    	(c) 2015 by Exit Games GmbH, http://www.exitgames.com
    	Photon server configuration file.
    	For details see the photon-config.pdf.
    
    	This file contains two configurations:
    		
    		"LoadBalancing"
    				Loadbalanced setup for local development: A Master-server and a game-server.
    				Starts the apps: Game, Master, CounterPublisher
    				Listens: udp-port 5055, tcp-port: 4530, 843 and 943		
    	
    -->
    
    <Configuration>
    	<!-- Multiple instances are supported. Each instance has its own node in the config file. -->
        
    	<LoadBalancing
    		MaxMessageSize="512000"
    		MaxQueuedDataPerPeer="512000"
    		PerPeerMaxReliableDataInTransit="51200"
    		PerPeerTransmitRateLimitKBSec="256"
    		PerPeerTransmitRatePeriodMilliseconds="200"
    		MinimumTimeout="5000"
    		MaximumTimeout="30000"
    		DisplayName="LoadBalancing (MyCloud)">
    
    		<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
    		<!-- Port 5055 is Photon's default for UDP connections. -->
    		<UDPListeners>
    			<UDPListener
    				IPAddress="0.0.0.0"
    				Port="5055"
    				OverrideApplication="Master">
    			</UDPListener>
    			<UDPListener
    				IPAddress="0.0.0.0"
    				Port="5056"
    				OverrideApplication="Game">
    			</UDPListener>
    			
    		</UDPListeners>
    		
    		<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->		
    		<TCPListeners>
    			<!-- TCP listener for Game clients on Master application -->
    			<TCPListener
    				IPAddress="0.0.0.0"
    				Port="4530"
    				OverrideApplication="Master"
    				PolicyFile="Policy\assets\socket-policy.xml"
    				InactivityTimeout="10000"
    				>
    			</TCPListener>
    			
    			<TCPListener
    				IPAddress="0.0.0.0"
    				Port="4531"
    				OverrideApplication="Game"
    				PolicyFile="Policy\assets\socket-policy.xml"
    				InactivityTimeout="10000">
    			</TCPListener>
    			
    			<!-- DON'T EDIT THIS. TCP listener for GameServers on Master application -->
    			<TCPListener
    				IPAddress="0.0.0.0"
    				Port="4520">
    			</TCPListener>
    		</TCPListeners>
    		
    		<!-- Policy request listener for Unity and Flash (port 843) and Silverlight (port 943)  -->
    		<PolicyFileListeners>
    		  <!-- multiple Listeners allowed for different ports -->
    		  <PolicyFileListener
    			IPAddress="0.0.0.0"
    			Port="843"
    			PolicyFile="Policy\assets\socket-policy.xml">
    		  </PolicyFileListener>
    		  <PolicyFileListener
    			IPAddress="0.0.0.0"
    			Port="943"
    			PolicyFile="Policy\assets\socket-policy-silverlight.xml">
    		  </PolicyFileListener>
    		</PolicyFileListeners>
    
    		
    		<!-- WebSocket (and Flash-Fallback) compatible listener -->
    		<WebSocketListeners>
    			<WebSocketListener
    				IPAddress="0.0.0.0"
    				Port="9090"
    				DisableNagle="true"
    				InactivityTimeout="10000"
    				OverrideApplication="Master">
    			</WebSocketListener>
    			
    			<WebSocketListener
    				IPAddress="0.0.0.0"
    				Port="9091"
    				DisableNagle="true"
    				InactivityTimeout="10000"
    				OverrideApplication="Game">
    			</WebSocketListener>
    			
    		</WebSocketListeners>
    
    		<!-- Defines the Photon Runtime Assembly to use. -->
    		<Runtime
    			Assembly="PhotonHostRuntime, Culture=neutral"
    			Type="PhotonHostRuntime.PhotonDomainManager"
    			UnhandledExceptionPolicy="Ignore">
    		</Runtime>
    
    		<!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. -->
    		<!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. -->
    		<Applications Default="Master">		
    			<Application
    				Name="Master"
    				BaseDirectory="LoadBalancing\Master"
    				Assembly="Photon.LoadBalancing"
    				Type="Photon.LoadBalancing.MasterServer.MasterApplication"
    				ForceAutoRestart="true"
    				WatchFiles="dll;config"
    				ExcludeFiles="log4net.config"
    				>
    			</Application>
    			<Application
    				Name="Game"
    				BaseDirectory="LoadBalancing\GameServer"
    				Assembly="Photon.LoadBalancing"
    				Type="Photon.LoadBalancing.GameServer.GameApplication"
    				ForceAutoRestart="true"
    				WatchFiles="dll;config"
    				ExcludeFiles="log4net.config">
    			</Application>
    			
    			<!-- CounterPublisher Application -->
    			<Application
    				Name="CounterPublisher"
    				BaseDirectory="CounterPublisher"
    				Assembly="CounterPublisher"
    				Type="Photon.CounterPublisher.Application"
    				ForceAutoRestart="true"
    				WatchFiles="dll;config"
    				ExcludeFiles="log4net.config">
    			</Application>	
    		</Applications>
    	</LoadBalancing>	
    	
    	
    	
    	<!-- Instance settings -->
    	<MMoDemo
    		MaxMessageSize="512000"
    		MaxQueuedDataPerPeer="512000"
    		PerPeerMaxReliableDataInTransit="51200"
    		PerPeerTransmitRateLimitKBSec="256"
    		PerPeerTransmitRatePeriodMilliseconds="200"
    		MinimumTimeout="5000"
    		MaximumTimeout="30000"
    		DisplayName="MMO Demo"
    		>
    		
    		<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
    		<!-- Port 5055 is Photon's default for UDP connections. -->
    		<UDPListeners>
    			<UDPListener
    				IPAddress="0.0.0.0"
    				Port="5055"
    				OverrideApplication="MMoDemo">
    			</UDPListener>
    		</UDPListeners>
        
    		<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
    		<!-- Port 4530 is Photon's default for TCP connecttions. -->
    		<!-- A Policy application is defined in case that policy requests are sent to this listener (known bug of some some flash clients) --> 
    		<TCPListeners>
    			<TCPListener
    				IPAddress="0.0.0.0"
    				Port="4530"
    				PolicyFile="Policy\assets\socket-policy.xml"
    				InactivityTimeout="10000"
    				OverrideApplication="MMoDemo"				
    				>
    			</TCPListener>
    		</TCPListeners>
    
    		<!-- Policy request listener for Unity and Flash (port 843) and Silverlight (port 943)  -->
    		<PolicyFileListeners>
    		  <!-- multiple Listeners allowed for different ports -->
    		  <PolicyFileListener
    			IPAddress="0.0.0.0"
    			Port="843"
    			PolicyFile="Policy\assets\socket-policy.xml"
    			InactivityTimeout="10000">
    		  </PolicyFileListener>
    		  <PolicyFileListener
    			IPAddress="0.0.0.0"
    			Port="943"
    			PolicyFile="Policy\assets\socket-policy-silverlight.xml"
    			InactivityTimeout="10000">
    		  </PolicyFileListener>
    		</PolicyFileListeners>
    
    		<!-- WebSocket (and Flash-Fallback) compatible listener -->
    		<WebSocketListeners>
    			<WebSocketListener
    				IPAddress="0.0.0.0"
    				Port="9090"
    				DisableNagle="true"
    				InactivityTimeout="10000"
    				OverrideApplication="MMoDemo">
    			</WebSocketListener>
    		</WebSocketListeners>
    
    		<!-- Defines the Photon Runtime Assembly to use. -->
    		<Runtime
    			Assembly="PhotonHostRuntime, Culture=neutral"
    			Type="PhotonHostRuntime.PhotonDomainManager"
    			UnhandledExceptionPolicy="Ignore">
    		</Runtime>
    				
    
    		<!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. -->
    		<!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. -->
    		<Applications Default="MMoDemo">
    		
    			<!-- MMO Demo Application -->
    			<Application
    				Name="MMoDemo"
    				BaseDirectory="MmoDemo"
    				Assembly="Photon.MmoDemo.Server"
    				Type="Photon.MmoDemo.Server.PhotonApplication"
    				ForceAutoRestart="true"
    				WatchFiles="dll;config"
    				ExcludeFiles="log4net.config">
    			</Application>
    
    			<!-- CounterPublisher Application -->
    			<Application
    				Name="CounterPublisher"
    				BaseDirectory="CounterPublisher"
    				Assembly="CounterPublisher"
    				Type="Photon.CounterPublisher.Application"
    				ForceAutoRestart="true"
    				WatchFiles="dll;config"
    				ExcludeFiles="log4net.config">
    			</Application>	
    
    		</Applications>
    	</MMoDemo>
    	
    
    	<MYGameServer
    		MaxMessageSize="512000"
    		MaxQueuedDataPerPeer="512000"
    		PerPeerMaxReliableDataInTransit="51200"
    		PerPeerTransmitRateLimitKBSec="256"
    		PerPeerTransmitRatePeriodMilliseconds="200"
    		MinimumTimeout="5000"
    		MaximumTimeout="30000"
    		DisplayName="MyGameServer (LJL)"><!-- 显示名称->
    
    		<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
    		<!-- Port 5055 is Photon's default for UDP connections. -->
    		<UDPListeners>
    			<UDPListener
    				IPAddress="0.0.0.0"
    				Port="5055"
    				OverrideApplication="MYGameServer">
    			</UDPListener>						
    		</UDPListeners>
    		
    		<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->		
    		<TCPListeners>
    			<!-- TCP listener for Game clients on Master application -->
    			<TCPListener
    				IPAddress="0.0.0.0"
    				Port="4530"
    				OverrideApplication="MYGameServer"
    				PolicyFile="Policy\assets\socket-policy.xml"
    				InactivityTimeout="10000"
    				>
    			</TCPListener>
    			
    			<!-- DON'T EDIT THIS. TCP listener for GameServers on Master application -->
    			<TCPListener
    				IPAddress="0.0.0.0"
    				Port="4520">
    			</TCPListener>
    		</TCPListeners>
    		
    		<!-- Policy request listener for Unity and Flash (port 843) and Silverlight (port 943)  -->
    		<PolicyFileListeners>
    		  <!-- multiple Listeners allowed for different ports -->
    		  <PolicyFileListener
    			IPAddress="0.0.0.0"
    			Port="843"
    			PolicyFile="Policy\assets\socket-policy.xml">
    		  </PolicyFileListener>
    		  <PolicyFileListener
    			IPAddress="0.0.0.0"
    			Port="943"
    			PolicyFile="Policy\assets\socket-policy-silverlight.xml">
    		  </PolicyFileListener>
    		</PolicyFileListeners>
    
    		
    		<!-- WebSocket (and Flash-Fallback) compatible listener -->
    		<WebSocketListeners>
    			<WebSocketListener
    				IPAddress="0.0.0.0"
    				Port="9090"
    				DisableNagle="true"
    				InactivityTimeout="10000"
    				OverrideApplication="MYGameServer">
    			</WebSocketListener>
    			
    		</WebSocketListeners>
    
    		<!-- Defines the Photon Runtime Assembly to use. -->
    		<Runtime
    			Assembly="PhotonHostRuntime, Culture=neutral"
    			Type="PhotonHostRuntime.PhotonDomainManager"
    			UnhandledExceptionPolicy="Ignore">
    		</Runtime>
    
    		<!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. -->
    		<!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. -->
    		<Applications Default="MYGameServer">		
    			<Application
    				Name="MYGameServer"
    				BaseDirectory="MyGame"<!--项目路径->
    				Assembly="MyGameServer"<!--程序集->
    				Type="MyGameServer.MyGameServer"<!--命名空间下的入口类->
    				ForceAutoRestart="true"
    				WatchFiles="dll;config"
    				ExcludeFiles="log4net.config"
    				>
    			</Application>
    			
    			<!-- CounterPublisher Application -->
    			<Application
    				Name="CounterPublisher"
    				BaseDirectory="CounterPublisher"
    				Assembly="CounterPublisher"
    				Type="Photon.CounterPublisher.Application"
    				ForceAutoRestart="true"
    				WatchFiles="dll;config"
    				ExcludeFiles="log4net.config">
    			</Application>	
    		</Applications>
    	</MYGameServer>	
    	
    </Configuration>
    


    日志输出

    在MyGameServer的Setup函数里添如下代码

    //当框架启动时候调用
            protected override void Setup()
            {
                //设置配置文件属性
                log4net.GlobalContext.Properties["Photon:ApplicationLogPath"] = Path.Combine(Path.Combine(this.ApplicationRootPath, "bin_Win64"), "log");//设置日志文件存储目录
    
                //日志配置文件
                FileInfo logConfigFileInfo = new FileInfo(Path.Combine(this.BinaryPath, "log4net.config"));
                if (logConfigFileInfo.Exists)//配置文件存在
                {
                    //设置Photon日志插件为Log4Next
                    LogManager.SetLoggerFactory(Log4NetLoggerFactory.Instance);
                    //Log4Next这个插件读取配置文件
                    XmlConfigurator.ConfigureAndWatch(logConfigFileInfo);
                }
    
                LOG.Info("服务器初始化完成");
            }


    测试

    运行PhotonServer,运行MyGameServer


    发现在bin_Win64->log文件夹下成功生成了MyGameServer.log文件


    打开日志文件,有打印,表明配置成功



    关注blog.liujunliang.com.cn

    下一篇--------Unity3d游戏客户端与Photon服务器数据连接

    更多内容持续更新!!!!!


    展开全文
  • PhotonServer游戏服务器

    千次阅读 2017-11-22 15:56:59
    PhotonServer游戏服务器前序一、跟数据库交互 直接写,利用mysql的接口 使用nHibernate Csharp直接连接mysql 找到相应版本的动态链接库 在vs中点击引用-浏览-在c盘的assemblies中选择相应的版本-选择mysql.Data.dll...

    PhotonServer游戏服务器

    前序

    一、跟数据库交互

    1. 直接写,利用mysql的接口
    2. 使用nHibernate
    Csharp直接连接mysql
    1. 找到相应版本的动态链接库 在vs中点击引用-浏览-在c盘的assemblies中选择相应的版本-选择mysql.Data.dll文件。
    2. Documentaion文件夹中ConnectorNET.chm中提供api有助编程


    3. 定义一个字符串来存数据库的ip地址,端口号,数据库,用户名,密码。(端口号默认3306,如果安装时候修改了按修改的)

    利用程序进行插入操作

    insert into 表名(根据表中的列填写要插入的列username,possword)values(自己设置的值’aa’,’125’);
    Datetime.Now 获取当前时间
    string sql = "insert into users(username,password,registerdate) values('aaa','222','"+DateTime.Now+"')";

    更新操作

    Update 表名 set name(要设置的列)=’自己要修改的值’ where id(条件)=2; 或者是 where name=’a’;
    string sql = "update users set registerdate='2017-10-25' where id=13";

    删除数据

    delete from 表名 where 条件id=4

    string sql = "delete from users where name='aaa'";

    sql中的一些函数

    SQL 语法网址:w3school

    选择 文件夹图标旁边的加号,创建一个新的sql file 可以再mysql中直接写语句

    获取数据的方式

    查询时添加参数


    调用时:

    利用nhibernate

    1、nhibernate介绍和程序包的引入
    NHibernate是一个面向.NET环境的对象/关系数据库映射工具<br/>
    

    如果利用nhibernate来与数据库交互的话不仅需要引入mysql.dll还需要引入nhibernate.dll,以下是nhibernate的两种引入方式(引入mysql也可以使用):


    1. 到官网下载-找到Required_Bins-找到NHibernate.dll引入即可。

    2. 在VS中利用NUget:在资源管理右键-管理Nuget程序包-搜索nhibernate-安装即可。

    配置nhibernate数据库连接配置
    1. 添加一个xml文件(固定名称):hibernate.cfg.xml
    2. 修改官网上的配置信息:修改后如下

      !!!需要在其文件的属性栏把(复制到输出目录):选择为始终
    如何进行类和表的映射
    1. 定义一个类。
    2. 添加一个映射文件。(xml文件) 文件名.hbm.xml
    3. 在官网上找到映射文件进行复制修改如下:


      !!!需要在其文件的属性栏把(生成操作):选择为嵌入

      类型根据官方文档中的进行修改例如:int应改为Int32
    解析数据库连接配置文件和表映射文件
    1. 进行引用:using NHibernate ;using NHibernate.Cfg;
    2. 解析hibernate.cfg.xml
    3. var configuration=new Configuration();configuration.Configure(); 也可以指定一个文件configuration.Configure(“名字”);
    4. 解析映射文件 User.hbm.xml….. configuration.AddAssembly(“AitingEDU”);
    创建session对话进行添加操作

    Photon Server的介绍

    一、Photon Server工作流程介绍如图所示:

    - 解压后有两个文件夹最为重要:
    - deploy:application要在其中部署
    - src-server:一些demo的源码

    二、下载的Photon Server 默认是连接数为30如果想更大可购买,官网上有一个连接数为100的,只需下载赋值到运行Photon ServerControllor.exe同级重启Photon Server即可在Liscene info中可查看。

    一、创建第一个服务器端项目,并设置部署的目录


    1. 创建一个解决方案
    2. 新建一个类库
    3. 在PhotonServer解压文件夹中的deploy中新建一个文件夹(名字自定义)。
    4. 在3创建的文件夹中再创建一个文件夹(命名为bin)
    5. 在创建的解决方案中的属性-生成-输出路径改为4。重新生成这个解决方案即可。

    二、开发ApplicationBase和ClientPeer


    1. 要添加引用:PhotonServer给我们提供的动态链接库(.dll文件)在项目的引用中右键-浏览-PhotonServer解压文件夹中的lib文件夹中 添加一下三个引用
    2. using Photon.SocketServer;
    3. 在(一)中的解决方案下删除自带的类,新建一个主类,名称与解决方案名字相同,设置为public并继承ApplicationBase(所有的server端 主类都要继承自applicationbase)。代码如下:

      在创建一个类命名为ClientPeer设置为public,并且继承自 Photon.SocketServer.ClientPeer。

    部署并开启我们的第一个服务器端应用


    1. 要先进行配置:找到deploy-PhotonServer.config。
    2. 将其中一个配置好的代码复制一个进行修改修如下:
      a.标签名字MMoDemo-(自己起,不能重复)
      b.DisplayName-(自己起,这个名字将会在外部显示如图:)

      c.如图所示:

      d.重新启动PhotonServer如图所示:

      如果服务启动失败或者有错需要在Logs(日志中找错),上图中的Open Logs,就是打开日志。

    配置Photon Server中的日志Logs

    1. 需要一个插件Log4Net(在引用中点击浏览-根目录中的lib中找到)
    2. Log4net的配置文件,
      1)在官网中找:http://logging.apache.org/log4net/
      2)在PhotonServer的根目录中-scr server中-随便选择一个项目-找到其中的.server为后缀的文件夹-找到log4net。将这个直接复制到MyGameServer中。并把其设置为始终复制。
      3)对配置文件进行修改如图所示:
    3. 添加一个引用:ExitGames.Logging.Log4Net.dll
      1)代码如下所示:

      2)我们可以点击open在deploy-log中找到我们自己的日志文件可以查看到我们输出的日志,如果我们想同意放在win64-log中休要修改一句代码如下:

      提示:
      1)如果应用配置出错了:PhotonCLR.log中找。
      2)如果程序启动异常了:Photon-MyGameInstance-20171116.log中找。
      3)如果程序代码逻辑出错了:就在我么自己输出的日志中找。

    创建Unity客户端


    1. 引入PhotonServer的sdk到unity中:lib-Photon3Unity3d.dll
      1)在unity中新建一个文件夹命名为:Plugins(插件unity会优先编译)。
      2)把文件拖入。
    2. 在场景中新建一个空游戏物体命名为:PhotonEngine,身上挂一个脚本PhotonEngine用来给服务器端交互。
      1)把脚本改为单利如下:

      2)添加一个引用:using ExitGames.Client.Photon;
      3) 让我们的脚本也能实现监听功能如下所示:

      4)调用监听和udp协议: PhotonPeer a_Peer = new PhotonPeer(this,ConnectionProtocol.Udp);
      5)创建连接:

      a.IP选择建议图中的1.2:

      6)代码参考:

    创建客户端的请求

    1. 通过OpCustom像服务器端发起请求
    2. 服务器端通过OnOperationRequest进行处理
    3. 服务器端通过OperationRespone ,SendOperationRespone给客户端进行回应。
    4. 用客户端中的接口OnOperationResponse来对服务器端的回应做处理。
    5. 服务器端代码如下所示:
    6. 客户端代码如下所示:


      接口的调用

    客户端向服务器端发送带参数的请求

    1. 客户端代码:
    2. 服务器代码:

    服务器端向客户端发送带参数的请求

    1. 客户端代码 :
    2. 服务器代码:

    服务器端向客户端发送事件

    1. 客户端代码:
    2. 服务器代码:

    交互的整体流程图

    网站推荐

    数据库映射工具
    PhotonServer

    知识共享许可协议
    本作品由A_AiTing采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

    展开全文
  • 揭秘游戏服务器,不看后悔!!!

    万次阅读 多人点赞 2021-06-13 10:31:01
    游戏好玩,所有玩家看到了前端,但是做一款游戏,离不后台游戏服务器的支持,服务器都要做什么,服务器的架构是什么,需要哪些技术,一系列的问题有没有思考过?下面讲下作为做服务器开发中需要做的事。 1、常见...

    目录

     

    前言

    1、常见游戏模块

    2、开发语言与项目构建发布

    3、JAVA游戏服务器,需要掌握的技术

    4、总结


    点赞在看,养成习惯

    前言

    《摩尔庄园》前段时间上线, 持续超出市场预期,相信也有不错的收益。游戏好玩,所有玩家看到了前端,但是做一款游戏,离不开后台游戏服务器的支持,服务器都要做什么,服务器的架构是什么,需要哪些技术,一系列的问题有没有思考过?下面讲下作为做服务器开发中需要做的事。


    1、常见游戏模块

    • 游戏玩法

    游戏开发中常见的玩法模块,一般的游戏都会包含这些玩法

    新手引导、任务系统、背包系统、装备系统、副本、战斗系统、活动、商店、充值,竞技场,公会系统,好友系统、聊天系统、邮件系统、红点系统等等

    • 通用模块

    1. 定时job,处理一些定期活动重置,排名发奖励等

    2. 登录,顶号,离线,断线重连处理

    3. 敏感词检测,版署需要

    4. 日志系统,记录玩家行为日志,奖励日志等

    5. 功能开启关闭,有时候游戏出问题后(比如刷奖励)指定功能需要及时关闭

    6. 掉落,奖励随机规则

    7. 防沉迷系统,主要是未成年人保护规则

    8. 聊天监控,

    9. 错误上报机制

    10. 道具卡兑换,邀请码

    11. 夏令时问题处理

    12. 不停服热更线上代码

    13. 紧急下家运营活动

    14. 合服

    • 运营后台管理系统

    1. 发布下架活动

    2. 发布公告

    3. 发送邮件

    4. 游戏资源冻结

    5. 账号封号,解封,禁言

    6. 查询当前在线人数

    7. 我自己的专栏:https://blog.csdn.net/perfect2011/category_11069339.html

    2、开发语言与项目构建发布

    一般游戏服务器使用C++,nodejs,photon, JAVA等语言开发,端游戏一般选择C++,因为端游对服务器的性能要求相对比较高一些,语言各有利弊,C++效率高,但是掌握度难些,JAVA易于掌握,开发效率搞,目前对于追求快速上线率的页游和手游来说,JAVA成了一个不错的选择,下面主要以JAVA项目来讲述服务器各模块之间如何交互,如何分工合作。项目采用maven框架构建,简化了项目依赖管理, jar包便于与持续集成工具(jenkins)整合一键打包发布svn,一般地,游戏服务器的架构划分如下三层:网络接入层、游戏逻辑层、数据存储层

    • 网络接入层

    通信方面使用Netty框架,主要封装各种物理底层通讯机制,让应用程序员关注业务逻辑。协议数据使用protobuff, Protobuf有更高的消息压缩率,时间效率和空间效率都有很大的提升,支持多语言,跨平台

    • 数据缓存以及存储

    市面用的游戏用到的数据库大多是下面这几种:

    MySQL,MongoDB, Redis

    游戏服务器都配备了数据库,是因为游戏越来越复杂,数据量也越来越多,而且采用数据库也方便对数据的管理和备份。mysql主要存储一些游戏中玩家数据,redis主要存储一些跨服数据,比如跨服排行榜数据实时排名,或者数据的缓存。

    游戏中玩家数据需要及时响应,及时反馈,一般游戏中绝大部分的数据是有缓存的,游戏中玩家产生的数据变化,一般先修改玩家缓存数据,一定时间后,缓存数据定时批量写入数据库,长期使用不到的缓存将会被清理,减少内存空间使用。

    • 游戏逻辑层

    服务器各类模块介绍 :

    模块名 功能类型 功能说明
    yyds-all maven父功能 管理模块关系,maven的一些配置
    yyds-core 公共模块 游戏业务无关的公共代码。
    yyds-common 基础模块 游戏业务相关的公共代码。
    yyds-game 游戏服 处理游戏业务逻辑(游戏和聊天业务,聊天消息通过网关进行转发)
    yyds-gate 网关服 负责维护客户端连接,转发消息。
    yyds-scene 场景服 处理地图相关业务(移动、视野同步)
    yyds-web WEB服 登录、创角、充值、GM命令、运营后台操作入口。
    yyds-platform 跨服 游戏服之间的消息中转,跨服类玩法。
    yyds-fighter 战斗服 处理战斗逻辑

    服务器架构 :

    注:platform 和多个游戏服相连接。

    流程说明:

    • 登陆流程:玩家登陆时首先连接web服,进行登陆,验证成功后,会将玩家登陆的token 放到Gate服。然后玩家连接Gate服登陆到Game服。

    • 战斗流程:玩家在Game服发起战斗,比如匹配战斗,则在Game服上匹配,然后送入Fighter 战斗服进行战斗,此时所有的战斗消息从Gate服直接路由到Fighter服,战斗结果发送给Game服,然后进行发奖等逻辑

    • 玩家移动流程:玩家移动消息同步给Scene服,Scene服每一帧同步给所有的玩家


    3、JAVA游戏服务器,需要掌握的技术

    1. Java基础知识

    2. JavaNIO编程

    3. 多线程编程,并发集合的掌握,游戏中有很多并发事件,安全性尤为重要

    4. 热更新,内存,CPU性能分析

    5. Netty,Mina网络框架精通一种

    6. Redis,memcache,MongoDB等单用或者组合使用

    7. SQL语言,数据库:如mysql

    8. 数据库操作,比如mybatis,Hibernate

    9. spring,springMvc主要用于http协议的WEB服务器

    10. tomcat,Nginx

    11. Linux常用的基本命令及shell脚本(服务器发布,启动关闭)

    4、总结

    游戏服务器因为需要面向所有的玩家,所以对服务器的稳定性要求比较高,不能总是出现问题《需要在开发中细心。

    策划的设计经常天马行空,所以也要考虑到服务器的功能扩展性,争取在尽量少写代码的情况下完成功能。

    服务端程序的开发速度很重要,需要考虑模块的通用性,功能的扩展性,尽量的降低bug可能性,合理设计。

    服务端同学任重道远,需要不断的学习和积累经验,才能做好游戏的支撑。

    加油吧,希望各位同学做出自己喜欢的游戏

     

     

     

     

    展开全文
  • 游戏服务器开服异常Check List

    千次阅读 2013-07-08 18:58:24
    经常性的服第一天是服务器压力较大的,玩家大批量涌入,大批量下载客户端资源,如果准备不足的话,多少会遇到一些问题,而这些问题又不是游戏应用本身导致的,如果正好广告预定和通知都已经发出去,那么延迟服将...
  • 这里为了简单化, 先一个最简单的TCPServer服务器端(网络上的各种服务器框架大同小异, 这里选择用266的tcp框架. 其实是一个意思) package main import ( "log" "time" connection "github.com/266ga...
  • 众所周知,《泰拉瑞亚》是一款像素风的沙盒游戏,有着极高的自由度,游戏的玩法很丰富。 你可以选择作为一名战士,讨伐这个位置的世界;可以选择做一名建筑师,各种别具一格的建筑都会一一呈现;可以选择做一名电力...
  • 游戏服务器开发都要学什么

    万次阅读 多人点赞 2019-08-22 17:26:27
    近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等。不管出于什么原因吧,做为一...
  • 游戏服务器架构

    万次阅读 2012-08-25 10:07:24
    网关服务器要管理玩家连接,需要高并发,可以多个 scene mgr纯粹的转发消息功能 数据库服务器纯粹的查询修改数据功能,如果成为瓶颈,则加缓存 数据库服务器: 屏蔽其他服务器的sql操作,或者把他叫做存储...
  • 游戏服务器之服务器优化思路

    千次阅读 2014-07-16 01:59:31
    游戏服务器之服务器优化思路
  • 在使用虚幻4引擎开发网络游戏时免不了会需要自己来编写服务器,关于如何编写网络服务器,不在...那么这就是服务器的启动日志喽,你可以把它理解为是一个后台的进程,也就是所谓的游戏服务器。那么虚幻4自带的这套呢...
  • Photon Server是一款实时的Socket服务器和开发框架,快速、使用方便、容易扩展,服务端架构在Windows系统平台上,采用C#语言编写,Photon Server发布包括两个部分,Client SDK Release和Server SDK Update,Server ...
  • 设计游戏服务器

    千次阅读 2012-01-05 10:48:34
    有段时间没有研究技术了,这次正好看到了新版的mangos,较之以前我看的版本有了比较大的完善,于是再次浏览了下他的代码,也借此机会整理下我在游戏服务器开发方面的一些心得,与大家探讨。  另外由于为避免与...
  • golang Leaf 游戏服务器框架简介

    万次阅读 2017-11-04 11:43:43
    Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏服务器框架。Leaf 适用于各类游戏服务器的开发,包括 H5(HTML5)游戏服务器。Leaf 的关注点:良好的使用体验。Leaf 总是尽可能的提供简洁和...
  • 游戏服务器架构设计

    千次阅读 2015-04-28 13:28:47
    网络游戏的结构分为客户端与服务器端,客户端采用2D绘制引擎或者3D绘制引擎绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的游戏画面绘制。客户端与服务器通过...
  • 自己的电脑上搭建游戏平台就得给自己的电脑购买一些好的配置以保证游戏的顺畅这会增加游戏成本,有时还会有系统崩溃的风险,这些潜在的风险处理起来还是比较麻烦的。 《我的世界》(Minecraf
  • 服务器架构类型本系列第3章中,有段落简单介绍过 服务器架构类型。对于IO游戏来说,通常会是大区大服类型本文将...以上为一个IO游戏服务器架构的最小架构集最小架构集 Login,负责登录逻辑 Room,负责核心房间玩法 Base
  • 为什么用Linux来服,个人觉得Windows服务器太费资源,Linux相对好一些,至于为什么是Centos,个人喜好罢了,你也可以用其他的Linux系统,以上只是个人见解,如有错误请见谅 系统安装Centos7以上,配置不建议太低,玩的人越...
  • 游戏服务器浅析

    千次阅读 2013-08-12 14:01:52
    1、平台费用:如果是大型公司,用windows server就要向微软交点保护费,如果是小型公司。。。你懂的,所以很多大型公司都选择了linux开发服务器,但不一定就说linux的好。 2、开发环境搭建:windows有现成的VS开发...
  • 搭建手游服务器,网上很多资料都是登陆服务器和游戏服务器分开,问一下,这样做有什么优势? 把游戏登陆逻辑单独成一个服务的优点有如下几点: 1、登陆入口唯一.:游戏如果不是自己运营,则需要上其他平台。每个平台...
  • 游戏服务器的常用架构

    万次阅读 多人点赞 2017-11-24 19:12:38
    游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求。所以这类服务的特点是要特别关注稳定性和性能。这类程序如果需要多个协作来提高承载能力,则还要关注部署和扩容的便利性;同时,...
  • 游戏服务器架构探讨

    千次阅读 2012-10-08 13:12:45
    有段时间没有研究技术了,这次正好看到了新版的mangos,较之以前我看的版本有了比较大的完善,于是再次浏览了下他的代码,也借此机会整理下我在游戏服务器开发方面的一些心得,与大家探讨。  另外由于为避免与公司...
  • C++游戏服务器开发常用工具介绍在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用。庄子有云,“吾生也有涯,而知也无涯,以有涯随无...
  • 网络游戏服务器开发

    千次阅读 2012-07-11 10:44:05
    当今网络游戏在中国大陆已经在大范围的蔓延,暂且不论这样的一种趋势会带来什么样的游戏产业趋势。这里只就网络游戏的制作和大家...网络游戏的程序开发从某种意义上来看,最重要的应该在于游戏服务器端的设计和
  • 游戏服务器架构探讨

    千次阅读 2010-11-07 23:15:00
    这次正好看到了新版的mangos,较之以前我看的版本有了比较大的完善,于是再次浏览了下他的代码,也借此机会整理下我在游戏服务器开发方面的一些心得,与大家探讨。 另外由于为避免与公司引起一些不必要的纠
  • 游戏服务器帧率控制

    千次阅读 2014-04-21 22:00:39
     网络游戏服务器的主要作用是模拟整个游戏世界,客户端用过网络连接把一些信息数据发给服务器,在操作合法的情况下,更新服务器上该客户端对应的player实体、所在场景等,并把这些操作及其影响广播出去。...
  • linux游戏服务器搭建

    千次阅读 2020-03-13 19:08:13
    linuxgsm.com 一百多款游戏服务器快速搭建 支持steam正版游戏 脚本下载需要外贸加速,或者多试几十次
  • 但是,在游戏服务器端开发领域中的很多重要问题,并没有被明确的分辨出其特异性,从而得到专门的对待。我们不管是在业界开源领域,还是内部分享中,很少会有专门针对游戏业务特征进行专门设计的组件、类库或者框架。...
  • 一、把路由器的地址改为:192.168.200.200(虚拟机的地址为192.168.200.100),只要把虚拟机所在的网段包括在内即可; 二、把本机的地址改为:192.168.200.100,即虚拟机的地址; 三、把虚拟机的网络连接方式改为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,755
精华内容 41,502
关键字:

如何自己开游戏服务器