PhotonServer介绍

2023-11-14

官网 On-Premises Cross Platform Multiplayer Game Backend | Photon Engine

Photon为您完全封装了每个客户端平台的复杂网络层。Photon Server支持可靠的UDP,TCP,HTTP和Web套接字,每种都具有精简和纤薄的传输协议。
您的游戏客户端跨平台和跨协议进行通信:只需发送数据,Photon进行反序列化/序列化。

光子服务器架构

Photon Core采用原生C ++编写,可提供最佳性能并支持一流的工具链。结合Windows Server IO完成端口(IOCP),它实现了协议的大量“提升”。
业务逻辑在.NET CLR中执行,包含用C#或任何其他.NET语言编写的应用程序。

所有应用程序都位于可扩展的RPC和事件开发框架之上,以解决常见任务。
RPC调用可以简单灵活地映射到操作实例。基于使用光纤的消息传递原理简化了线程。总的来说,Photon Server旨在在CPU成为瓶颈之前使流量饱和。

下载PhotonServer SDK

解压到非中文目录

 文件夹介绍

build:

deploy:部署的服务端程序

doc:文档

lib:动态链接库  重要的有Photon3Unity3D.dll

src-server:官方提供的demo

如何启动?

  根据操作系统,32位在bin win32文件夹,64位在bin win64文件夹中 运行PhotonControl.exe

 

免费用户只能同时链接20个用户,注册后可连接100个。在官网免费注册,下载license文件,放到PhotonControl.exe所在文件夹。

配置文件  PhotonServer.config  配置要部署的程序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

<?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>

  <!-- Instance settings -->

  <MyGameInstance   服务名

        MaxMessageSize="512000"

        MaxQueuedDataPerPeer="512000"

        PerPeerMaxReliableDataInTransit="51200"

        PerPeerTransmitRateLimitKBSec="256"

        PerPeerTransmitRatePeriodMilliseconds="200"

        MinimumTimeout="5000"

        MaximumTimeout="30000"

        DisplayName="My Game"  显示名

        >

    <!-- 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>   UDP

      <UDPListener

                IPAddress="0.0.0.0"

                Port="5055"

                OverrideApplication="MyGame1">

      </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>   TCP

      <TCPListener

                IPAddress="0.0.0.0"

                Port="4530"

                PolicyFile="Policy\assets\socket-policy.xml"

                InactivityTimeout="10000"

                OverrideApplication="MyGame1"

                >

      </TCPListener>

    </TCPListeners>

   

    <!-- 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="MyGame1">   应用配置

      <!-- MMO Demo Application -->

      <Application

                Name="MyGame1"  应用名

                BaseDirectory="MyGameServer"   存放的文件夹

                Assembly="MyGameServer"         程序集名称

                Type="MyGameServer.MyGameServer"    启动名称

                ForceAutoRestart="true"    强制重启

                WatchFiles="dll;config"

                ExcludeFiles="log4net.config">   日志文件

      </Application>

    </Applications>

  </MyGameInstance>

</Configuration>

  

创建第一个服务器端项目,并部署

创建类库项目

 配置要求

将生成路径改为deploy/MyGameServer/bin,该文件夹位自己创建

右键项目重新生成后,查看该文件夹,发现生成MyGameServer.dll即成功

开发ApplicationBase和ClientPeer

  添加引用  

添加主类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

/// <summary>

    /// 主类,启动类,类似Main()

    /// 所有主类都继承自ApplicationBase

    /// </summary>

    class MyGameServer : ApplicationBase

    {

        /// <summary>

        /// 客户端请求链接

        /// </summary>

        /// <param name="initRequest"></param>

        /// <returns></returns>

        protected override PeerBase CreatePeer(InitRequest initRequest)

        {

           return new ClientPeer(initRequest);

        }

        /// <summary>

        ///server启动时 初始化

        /// </summary>

        protected override void Setup()

        {

            throw new NotImplementedException();

        }

        /// <summary>

        /// server关闭

        /// </summary>

        protected override void TearDown()

        {

            throw new NotImplementedException();

        }

    }

  ClientPeer类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

/// <summary>

    /// 管理跟客户端的链接

    /// </summary>

    public class ClientPeer : Photon.SocketServer.ClientPeer

    {

        public ClientPeer(InitRequest initRequest) : base(initRequest)

        {

        }

        /// <summary>

        /// 断开链接

        /// </summary>

        /// <param name="reasonCode"></param>

        /// <param name="reasonDetail"></param>

        protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)

        {

            throw new System.NotImplementedException();

        }

        protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)

        {

            throw new System.NotImplementedException();

        }

    }

  更改配置文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

<MyGameInstance

        MaxMessageSize="512000"

        MaxQueuedDataPerPeer="512000"

        PerPeerMaxReliableDataInTransit="51200"

        PerPeerTransmitRateLimitKBSec="256"

        PerPeerTransmitRatePeriodMilliseconds="200"

        MinimumTimeout="5000"

        MaximumTimeout="30000"

        DisplayName="My Game"

        >

    <!-- 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="MyGame1">

      </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="MyGame1"

                >

      </TCPListener>

    </TCPListeners>

   

    <!-- 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="MyGame1">

      <!-- MMO Demo Application -->

      <Application

                Name="MyGame1"

                BaseDirectory="MyGameServer"

                Assembly="MyGameServer"

                Type="MyGameServer.MyGameServer"

                ForceAutoRestart="true"

                WatchFiles="dll;config"

                ExcludeFiles="log4net.config">

      </Application>

    </Applications>

  </MyGameInstance>

  

日志文件Log

log4net

从src-server\Mmo\Photon.MmoDemo.Server复制log4net.config到项目根目录  属性设为始终复制

添加两个引用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<?xml version="1.0" encoding="utf-8" ?>

<log4net debug="false" update="Overwrite">

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">

    <file type="log4net.Util.PatternString" value="%property{Photon:ApplicationLogPath}\\MyServer.Server.log" />

    <appendToFile value="true" />

    <maximumFileSize value="5000KB" />

    <maxSizeRollBackups value="2" />

    <layout type="log4net.Layout.PatternLayout">

      <conversionPattern value="%d [%t] %-5p %c - %m%n" />

    </layout>

  </appender>

  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">

    <layout type="log4net.Layout.PatternLayout">

      <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />

    </layout>

    <filter type="log4net.Filter.LevelRangeFilter">

      <levelMin value="DEBUG" />

      <levelMax value="FATAL" />

    </filter>

  </appender>

  <!-- logger -->

  <root>

    <level value="INFO" />

    <!--<appender-ref ref="ConsoleAppender" />-->

    <appender-ref ref="RollingFileAppender" />

  </root>

  <logger name="OperationData">

    <level value="INFO" />

  </logger>

</log4net>

  更改MyGameServer类  配置日志

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

using System;

using System.IO;

using ExitGames.Logging;

using ExitGames.Logging.Log4Net;

using log4net.Config;

using Photon.SocketServer;

namespace MyGameServer

{

    /// <summary>

    /// 主类,启动类,类似Main()

    /// 所有主类都继承自ApplicationBase

    /// </summary>

    class MyGameServer : ApplicationBase

    {

        private static readonly ILogger log = LogManager.GetCurrentClassLogger();

        /// <summary>

        /// 客户端请求链接

        /// </summary>

        /// <param name="initRequest"></param>

        /// <returns></returns>

        protected override PeerBase CreatePeer(InitRequest initRequest)

        {

            log.Info("一个客户端链接过来了");

           return new ClientPeer(initRequest);

        }

        /// <summary>

        ///server启动时 初始化

        /// </summary>

        protected override void Setup()

        {

            //日志初始化

            log4net.GlobalContext.Properties["Photon:ApplicationLogPath"] =

                Path.Combine(Path.Combine(this.ApplicationRootPath, "bin_Win64"), "log");

                 

            FileInfo configFileInfo=new FileInfo(Path.Combine(this.BinaryPath,"log4net.config"));

            if (configFileInfo.Exists)

            {

                LogManager.SetLoggerFactory(Log4NetLoggerFactory.Instance);

                XmlConfigurator.ConfigureAndWatch(configFileInfo);

            }

            log.Info("Setup Completed");

        }

        /// <summary>

        /// server关闭

        /// </summary>

        protected override void TearDown()

        {

            log.Info("服务端关闭");

           // throw new NotImplementedException();

        }

    }

}

使用了PhotonServer之后本公司业务量剧增用户数量呈指数型增加非常好用!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PhotonServer介绍 的相关文章

随机推荐

  • Spring中比较常用的工具类

    清单 1 BeanDefinitionReaderUtils registerBeanDefinition 往spring容器注册一个beanDefinition 2 PropertiesLoaderUtils loadAllPropert
  • timm库(CV利器)的入门教程(1)

    省流 使用timm加载CNN进行图像分类 调整CNN使之更适合你的任务 问 使用timm搭建一个可以使用的CNN或ViT拢共需要几步 答 4步 0 安装 timm 1 import timm 2 创建model 3 运行model 这一节很
  • 二叉搜索树(树状数组)

    计数函数 程序 int lowbit int k return k k 功能 可视为每个节点的编号函数 加和函数 程序 int sum int x int ret 0 while x gt 0 ret c x x lowbit x retu
  • jmeter提取token后只能使用一次的鬼问题

    今天在测试一个内部接口时 需要先登录传入token 按照正常步骤作对应参数化和参数传递 过程略 提取token的方法有很多 这里我是用的是正则表达式 提了就正常用嘛 可发现不管下边添加了多少请求 同一线程组下 永远只有登录请求的下一个可以获
  • linux常用函数和知识点博文合集

    signal SIGCHLD SIG IGN 和signal SIGPIPE SIG IGN 中断产生EINTR错误 linux中sigaction函数详解 标准I O函数库提供了popen函数 它启动另外一个进程去执行一个shell命令行
  • 2023秋招算法题每日学习(4)

    DAY 4 1 AcWing 850 Dijkstra求最短路 ii 考察点 堆优化Dijkstra 求最短路问题 适合于稀疏图 利用邻接表来存储 邻接表不需要对重边做特殊的处理 1 基础知识 时间复杂度分析 堆优化Dijkstra 堆优化
  • JUST技术:利用迁移学习生成新城市的轨迹

    市民的出行轨迹数据无论是对于城市管理 规划 还是商业活动 都是重要的参考信息 然而 获取一个城市的人群轨迹数据却非常困难 在今年4月份召开的国际顶级互联网会议WWW 2020 CCF A类 上 京东城市报告了被会议收录的论文 What is
  • 解决安装强化学习库gymnasium,box2d安装报错的问题

    gymnasium是强化学习的库 比较难安装 一 安装方法 安装Gymnasium 一定要all 这样可以安装所有依赖 pip install gymnasium all pip install gymnasium all 二 报错信息一
  • Docker安装记录

    1 卸载旧版本 yum remove docker docker client docker client latest docker common docker latest docker latest logrotate docker
  • Git版本控制

    Git 版本控制 什么是版本控制 版本控制是一种开发的过程中用于管理我们对文件 目录或工程等内容的修改历史 方便查看更改历史记录 备份以便恢复以前的版本的软件工程技术 实现跨区域多人协同开发 追踪和机载一个或者多个文件的历史记录 组织和保护
  • 成功解决VMware安装操作系统出现分辨率的问题

    文章目录 问题重现 问题原因 问题解决 方法一 拓展 1 电脑分辨率 2 xrandr命令 3 查询后如果没有合适的分辨率解决方案 参考资料 问题重现 如下图 在VMware16上安装ubuntu操作系统的时候 出现分辨率问题 导致底部的按
  • < 面试知识点:什么是 Node.js ?有哪些优缺点?应用场景? >

    文章目录 一 什么是 Node js 二 Node js 有哪些优缺点 三 Node js 能做什么 四 Node js 的 模块系统 五 Node js 应用场景 参考文献 往期内容 一 什么是 Node js Node js 是一个开源
  • 微信小程序如何获取微信昵称和头像

  • MySQL 高可用:mysql+mycat实现数据库分片(分库分表)

    什么是MYCAT 一个彻底开源的 面向企业应用开发的大数据库集群 支持事务 ACID 可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库 用来替代昂贵的Oracle集群 一个融合内存缓存技术 NoSQL技术 HDFS
  • Docker入门命令详解

    目录 一 Docker 简介 1 Docker引擎 2 Docker客户端 3 Docker镜像 4 Docker容器 5 Docker镜像注册中心 二 Docker的特点 1 快速运行 2 节省资源 3 便于交付 4 容易管理 三 Doc
  • C语言有小数乘法,十道小数乘小数的乘法竖式计算并有答案

    十道小数乘小数的乘法竖式计算并有答案以下文字资料是由 历史新知网www lishixinzhi com 小编为大家搜集整理后发布的内容 让我们赶快一起来看一下吧 十道小数乘小数的乘法竖式计算并有答案 6 5 8 4 56 1 3 3 2 2
  • C#实现串口通信

    背景 在工业控制中 工控机 一般都基于Windows平台 经常需要与智能仪表通过串口进行通信 串口通信方便易行 应用广泛 一般情况下 工控机和各智能仪表通过RS485总线进行通信 RS485的通信方式是半双工的 在Win32下 可以使用两种
  • 04_两种常见的网页反爬措施及应对方法

    一 封禁IP地址反爬 1 应对思路 理解这种反爬方法的含义 当我们用自己电脑的ip地址短时间 高频率访问某个具有此类反爬设置的网站 这种网站就会把我们的ip地址封禁 一般都是封24小时或者其他时间 解决方案 通过代理ip访问 这种方式只不过
  • SQL 语句 最大长度限制 DB2如何修改最大长度限制

    home datamart db2 get db cfg grep HEAP Sort heap thres for shared sorts 4KB SHEAPTHRES SHR AUTOMATIC Sort list heap 4KB
  • PhotonServer介绍

    官网 On Premises Cross Platform Multiplayer Game Backend Photon Engine Photon为您完全封装了每个客户端平台的复杂网络层 Photon Server支持可靠的UDP TC