V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Akiyu
V2EX  ›  程序员

服务器和客户端工作内容的区别?

  •  
  •   Akiyu · 2018-06-07 09:39:39 +08:00 · 6294 次点击
    这是一个创建于 2382 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近一个朋友说想转服务器, LZ 一直在做客户端, 并不了解客户端和服务器工作的区别

    有做过服务器也做过客户端的老哥来简单说说, 评价一下么?

    我之所以这么问, 主要是之前我做 Cocos2dx, 用 C++, 把框架了解了之后, 能完成一般需求了
    但是之后的项目要热更新, 我被告知要去学学 Lua, 让我感觉飘忽不定, 然后想到做客户端, 基本的应用
    你可能得用 QT, 游戏得话 U3d 还要 C#, 而了解了一下, 服务器的话没那么多东西, 核心就是架构和算法
    语言主流也就 C++和 Java, 朋友的原话是, "C++的话, 还是比较适合做服务器", 如果真的是这样, 我现在入行还不久
    可能会考虑转服务器

    20 条回复    2023-09-17 22:29:27 +08:00
    3dwelcome
        1
    3dwelcome  
       2018-06-07 09:49:19 +08:00
    最大的区别,是服务器必须要运行稳定,不能挂。用户资料必须异地备份,不能丢。这是最大的区别。

    客户端代码写烂,程序挂了,你可以马上调试。换服务器新版本,要反复测试,达到 99%的稳定性,才上线到生产服务器的。
    3dwelcome
        2
    3dwelcome  
       2018-06-07 09:50:54 +08:00   ❤️ 1
    劝楼主最好不用 C++写服务器,不是那么好查找 BUG。
    Akiyu
        3
    Akiyu  
    OP
       2018-06-07 09:52:49 +08:00
    @3dwelcome
    那用什么? 服务器的话, 一般是用哪些语言写
    3dwelcome
        4
    3dwelcome  
       2018-06-07 09:58:44 +08:00
    @Akiyu 用什么语言看什么需求了。只有部分游戏需要 C++高性能计算,如果普通的 REST 服务器,比如现在的手机游戏,查一下数据库,返回一个结构体,用什么语言都可以。

    就我身边人来说,JAVA 应该是主流吧。用 C++怎么说呢,只要楼主能保证代码 24x7 不挂,也没啥。
    v2dead
        5
    v2dead  
       2018-06-07 10:00:39 +08:00
    不是看语言是看平台。游戏服务器常用的有 C++,java,erlang,go。每种都有各自的优势,一般 C++写下层的经常会在上层挂一个脚本来方便开发,所以经常经常写着招 C++服务端进来写 lua。
    服务端编程和客户端编程思路有着本质上的区别,你考虑的问题从一个用户变成 N 个用户,还要考虑从不同规模下如何舍取。而且服务端不是没什么东西,而是东西太多太杂,每个方面都不能浅尝辄止。


    不过现在各个平台发展的很快,也可以简单调调 API 就可以写出不错的服务端了。
    Akiyu
        6
    Akiyu  
    OP
       2018-06-07 10:03:26 +08:00
    @3dwelcome
    对了, 我之前看过有人说服务器出了问题都是很严重得问题, 半夜都得爬起来改
    好像有 "微博程序员新婚修服务器", 这样得情况常见么
    KeepPro
        7
    KeepPro  
       2018-06-07 10:06:03 +08:00 via Android
    之所以有你说的这种情况,主要是因为服务器代码是运行在自己服务器上,相对稳定,而客户端就千差万别了。硬件平台包括手机,PC,浏览器,Xbox 等等。再加上系统环境不一样,针对不同的平台有不同的技术,导致前端使用的技术比较杂。所以如果追求稳定,可以转服务器啊。不过客户端等你做个几年以后,你就发现也还是 cpp lua js 这些。真正深挖的还是架构,性能调优,图形渲染,AI,物理碰撞这些。
    3dwelcome
        8
    3dwelcome  
       2018-06-07 10:10:49 +08:00
    @Akiyu 以前会,大家对服务器都不太熟悉,代码肯定会出问题,而服务器又是需要 24 小时运行的,会遇到连环夺命 CALL。

    现在大家经验丰富了,框架完备了,这种情况就大大减少了。就如上面说的,如果 leader 不放心下面的人用 C++写逻辑,就直接换 lua,就算出严重问题,也是个别用户掉线,不会影响到整体。

    服务器团队挫折多了,总会找到合理的应对方法。所以不用太过担心的。
    sunny352787
        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 的话就得服务器开发自己来搞了。

    哦,对了,对服务器开发来说,比客户端开发要求高的最大一点我认为就是处理并发的能力了,通俗讲就是开发多线程多进程程序的能力。

    其他还有啥?或者你想到啥再问吧。

    顺便,我在招服务器开发,北京酒仙桥,我亲自带,嗯嗯。
    vitalis
        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,只提供服务接口。

    所有客户端和服务器的区别,都可以从以上两点中找到原因。包括后端的性能优化、缓存、高并发、微服务等等。
    learnshare
        11
    learnshare  
       2018-06-07 10:59:20 +08:00
    客户端一般是给用户用的软件,多数都有 GUI,运行环境多样,用户众多
    Cbdy
        12
    Cbdy  
       2018-06-07 11:02:15 +08:00 via Android
    c++做服务器这话说的,c++适合高性能低延时低负载的领域吧,服务器只是其中一块。图形引擎这种,算客户端编程吧
    Akiyu
        13
    Akiyu  
    OP
       2018-06-07 11:08:30 +08:00
    @Cbdy
    这话不是我说的, 毕竟他也不怎么了解服务器, 可能有误解吧
    colincat
        14
    colincat  
       2018-06-07 11:20:26 +08:00
    搞游戏的嘛,现在做手游没有热更新的游戏还能发行吗,不过话说用 C++做服务器的也不少啊
    区别:感觉客户端更注重展现的东西吧,服务器大多数时间和接口进行交互,存取数据之类的,别的都是业务,也没啥,大同小异
    nicevar
        15
    nicevar  
       2018-06-07 11:22:13 +08:00   ❤️ 1
    也可以这样说,服务器挂了可以立马修复测试更新发布,客服端要是挖了坑用户不一定升级买你的帐,你要是强制升级直接给你卸载了
    其实做服务端稳定了之后要比做客户端舒服很多,做客户端你可能要填很多操作系统的坑,而且操作系统升级很快,隔一段时间一个版本,我就说播放器吧,大大小小的问题在手机系统上 10 几年了就没怎么好过,比如百度的播放器 sdk 做了这么多年了,还是在不少设备上没法播放
    Akiyu
        16
    Akiyu  
    OP
       2018-06-07 11:31:44 +08:00
    @nicevar
    嗯, 提 BUG 时, 有时提出 XX 手机可以, XX 手机不行, IOS 怎样, Android 怎样. 这种 BUG,就很头疼...
    MNOTOK
        17
    MNOTOK  
       2019-08-21 09:51:25 +08:00
    @sunny352787 你好前辈!我是个大三的学生,不知道如何联系您,想做游戏!
    Akiyu
        18
    Akiyu  
    OP
       2019-08-21 12:29:04 +08:00
    @MNOTOK
    游戏行业加班是常态, 996 更为普遍, 三思后行
    ------- by 一位快被加班熬秃头的程序员
    sunny352787
        19
    sunny352787  
       2019-08-21 12:46:33 +08:00
    @MNOTOK 440 天前的帖子都被翻出来了...你为啥想做游戏啊?为了做游戏你了解了哪些方面的知识?我招人其实倾向于招刚毕业的,但你得让我知道培养你值不值得
    RanShunliu
        20
    RanShunliu  
       2023-09-17 22:29:27 +08:00
    前辈,我刚大二,请问下现在 C++服务端对学历要求高吗,211 本打算出来工作
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2480 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:34 · PVG 21:34 · LAX 05:34 · JFK 08:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.