最近一个朋友说想转服务器, LZ 一直在做客户端, 并不了解客户端和服务器工作的区别
有做过服务器也做过客户端的老哥来简单说说, 评价一下么?
我之所以这么问, 主要是之前我做 Cocos2dx, 用 C++, 把框架了解了之后, 能完成一般需求了
但是之后的项目要热更新, 我被告知要去学学 Lua, 让我感觉飘忽不定, 然后想到做客户端, 基本的应用
你可能得用 QT, 游戏得话 U3d 还要 C#, 而了解了一下, 服务器的话没那么多东西, 核心就是架构和算法
语言主流也就 C++和 Java, 朋友的原话是, "C++的话, 还是比较适合做服务器", 如果真的是这样, 我现在入行还不久
可能会考虑转服务器
1
3dwelcome 2018-06-07 09:49:19 +08:00
最大的区别,是服务器必须要运行稳定,不能挂。用户资料必须异地备份,不能丢。这是最大的区别。
客户端代码写烂,程序挂了,你可以马上调试。换服务器新版本,要反复测试,达到 99%的稳定性,才上线到生产服务器的。 |
2
3dwelcome 2018-06-07 09:50:54 +08:00 1
劝楼主最好不用 C++写服务器,不是那么好查找 BUG。
|
4
3dwelcome 2018-06-07 09:58:44 +08:00
@Akiyu 用什么语言看什么需求了。只有部分游戏需要 C++高性能计算,如果普通的 REST 服务器,比如现在的手机游戏,查一下数据库,返回一个结构体,用什么语言都可以。
就我身边人来说,JAVA 应该是主流吧。用 C++怎么说呢,只要楼主能保证代码 24x7 不挂,也没啥。 |
5
v2dead 2018-06-07 10:00:39 +08:00
不是看语言是看平台。游戏服务器常用的有 C++,java,erlang,go。每种都有各自的优势,一般 C++写下层的经常会在上层挂一个脚本来方便开发,所以经常经常写着招 C++服务端进来写 lua。
服务端编程和客户端编程思路有着本质上的区别,你考虑的问题从一个用户变成 N 个用户,还要考虑从不同规模下如何舍取。而且服务端不是没什么东西,而是东西太多太杂,每个方面都不能浅尝辄止。 不过现在各个平台发展的很快,也可以简单调调 API 就可以写出不错的服务端了。 |
6
Akiyu OP |
7
KeepPro 2018-06-07 10:06:03 +08:00 via Android
之所以有你说的这种情况,主要是因为服务器代码是运行在自己服务器上,相对稳定,而客户端就千差万别了。硬件平台包括手机,PC,浏览器,Xbox 等等。再加上系统环境不一样,针对不同的平台有不同的技术,导致前端使用的技术比较杂。所以如果追求稳定,可以转服务器啊。不过客户端等你做个几年以后,你就发现也还是 cpp lua js 这些。真正深挖的还是架构,性能调优,图形渲染,AI,物理碰撞这些。
|
8
3dwelcome 2018-06-07 10:10:49 +08:00
@Akiyu 以前会,大家对服务器都不太熟悉,代码肯定会出问题,而服务器又是需要 24 小时运行的,会遇到连环夺命 CALL。
现在大家经验丰富了,框架完备了,这种情况就大大减少了。就如上面说的,如果 leader 不放心下面的人用 C++写逻辑,就直接换 lua,就算出严重问题,也是个别用户掉线,不会影响到整体。 服务器团队挫折多了,总会找到合理的应对方法。所以不用太过担心的。 |
9
sunny352787 2018-06-07 10:43:25 +08:00 1
你这突然一问,我还真反应了一会儿,客户端和服务器有啥区别我还真一下说不上来...
看你应该是初级程序吧,初级客户端拼界面,初级服务器写逻辑,理论上来说客户端比服务器还麻烦点,毕竟拼界面的适配问题比服务器多多了 深入一些的话,客户端多点图形的东西?不过现在也没有几个专门写图形的了,Unity 和 Cocos 都挺好用,犯不着去折腾底层,写写 Shader 也就是比较高级的客户端了,不过这部分工作已经有另一个职位,叫技术美术的来处理了。 服务器深入些的话,那就是分布式安全性负载性能神马的,设计数据库,设计服务器内部架构,设计协议,设计网络层什么的,不过这些设计除了数据库之外,客户端也会接触到,至少是类似的东西。 比如网络层,客户端服务器都要有,要么用现成的,要么自己设计。自己设计的话,你得知道 TCP、UDP、HTTP 都是啥吧,这部分内容客户端服务器区别就不大了,服务器多个 session 处理而已。 对于架构设计的话,客户端服务器都要有,像我这边做 Unity 开发,项目要求热更新到什么程度,性能到什么程度,支持什么机型,是 ARPG 还是卡牌,这些限制条件加上之后,你的客户端架构是啥?架构嘛,核心其实就在于“取舍”。 通常来说数据库是服务器自己的事情,对于数据库产品的选择,是用 mysql 还是 MongoDB,加不加缓存,用 Redis 还是 MemCache。以及数据库表设计,分库分表神马的,没有 DBA 的话就得服务器开发自己来搞了。 哦,对了,对服务器开发来说,比客户端开发要求高的最大一点我认为就是处理并发的能力了,通俗讲就是开发多线程多进程程序的能力。 其他还有啥?或者你想到啥再问吧。 顺便,我在招服务器开发,北京酒仙桥,我亲自带,嗯嗯。 |
10
vitalis 2018-06-07 10:53:57 +08:00 1
1. 客户端程序,满足一个用户。服务器程序,满足数万甚至十万百万用户。感受一下这里的区别。。。
2. 对于开发而言,客户端一般限定一种语言,有一个固定的 UI 和系统,比如 iOS、安卓、Windows、macOS、浏览器等。而服务器不限定语言,也不限定系统,你可以用 C/C++、Java、Node.js 、Python、Php。。。Linux、Windows、BSD、UNIX。。。另外,服务端没 UI,只提供服务接口。 所有客户端和服务器的区别,都可以从以上两点中找到原因。包括后端的性能优化、缓存、高并发、微服务等等。 |
11
learnshare 2018-06-07 10:59:20 +08:00
客户端一般是给用户用的软件,多数都有 GUI,运行环境多样,用户众多
|
12
Cbdy 2018-06-07 11:02:15 +08:00 via Android
c++做服务器这话说的,c++适合高性能低延时低负载的领域吧,服务器只是其中一块。图形引擎这种,算客户端编程吧
|
14
colincat 2018-06-07 11:20:26 +08:00
搞游戏的嘛,现在做手游没有热更新的游戏还能发行吗,不过话说用 C++做服务器的也不少啊
区别:感觉客户端更注重展现的东西吧,服务器大多数时间和接口进行交互,存取数据之类的,别的都是业务,也没啥,大同小异 |
15
nicevar 2018-06-07 11:22:13 +08:00 1
也可以这样说,服务器挂了可以立马修复测试更新发布,客服端要是挖了坑用户不一定升级买你的帐,你要是强制升级直接给你卸载了
其实做服务端稳定了之后要比做客户端舒服很多,做客户端你可能要填很多操作系统的坑,而且操作系统升级很快,隔一段时间一个版本,我就说播放器吧,大大小小的问题在手机系统上 10 几年了就没怎么好过,比如百度的播放器 sdk 做了这么多年了,还是在不少设备上没法播放 |
16
Akiyu OP @nicevar
嗯, 提 BUG 时, 有时提出 XX 手机可以, XX 手机不行, IOS 怎样, Android 怎样. 这种 BUG,就很头疼... |
17
MNOTOK 2019-08-21 09:51:25 +08:00
@sunny352787 你好前辈!我是个大三的学生,不知道如何联系您,想做游戏!
|
19
sunny352787 2019-08-21 12:46:33 +08:00
@MNOTOK 440 天前的帖子都被翻出来了...你为啥想做游戏啊?为了做游戏你了解了哪些方面的知识?我招人其实倾向于招刚毕业的,但你得让我知道培养你值不值得
|
20
RanShunliu 2023-09-17 22:29:27 +08:00
前辈,我刚大二,请问下现在 C++服务端对学历要求高吗,211 本打算出来工作
|