RT,一般强联网即时对战都采用 c++开发,java 是否可行呢? 9102 年了,Java 也有像 netty 这样比较成熟的高性能框架,而且服务器硬件性能也早就不是瓶颈了,开发效率也更高,也更易于维护。c++虽然运行效率高,但开发效率低,也会因为内存管理问题导致难以维护,甚至宕机。不知道两者之间是否还存在其他的一些差别,求教各位 v 友。
     1 
                    
                    Raymon111111      2019-09-25 10:24:19 +08:00 
                    
                    感觉 gc 一下受不了 
                 | 
            
     2 
                    
                    luckyrayyy      2019-09-25 10:27:53 +08:00 
                    
                    现在好像几百 GB 级别的 full gc 也可以控制在个位数的毫秒级别了,应该不是问题。我看到一个测试 zgc 回收 128G 内存平均用时 2ms 
                 | 
            
     3 
                    
                    NotNil1      2019-09-25 10:29:23 +08:00 
                    
                    可以尝试 netty 框架配合新版 jdk 的 zgc。 
                 | 
            
     4 
                    
                    ZiLong      2019-09-25 10:46:04 +08:00 
                    
                    netty 一般使用的是堆外内存,gc 压力较小,不说 zgc,就 jdk8 以上对 G1 的优化,就基本满足要求,建议使用 jdk11 或者 graalvm.当然,比较稳妥点的是上 C++14/17. 
                另外,如果业务需求不复杂,愿意尝试,给 rust 一个机会未尝不可.  | 
            
     5 
                    
                    misaka19000      2019-09-25 10:49:03 +08:00 
                    
                    听过英雄联盟的服务端是 Java 开发的 
                 | 
            
     6 
                    
                    passerbytiny      2019-09-25 10:49:49 +08:00    技术可行性是肯定有的,但恰恰相反的是,开发效率是没有的,因为 Java 从来没在(低延迟)游戏上有任何平台 /引擎 /框架 /工具的积累。 
                后面仅是猜测:Java,从以 Spring 为代表的 Web 应用,到 Hadoop、Storm 为代表的分布式系统应用,到像 Kettle 这样的工具性应用,不管处理的是事务性数据、流式数据、异步数据、作业数据,还是大数据,本质上都是离线准实时数据或者数据流(内存数据是镜像);而即时对战游戏,是需要在内存中直接处理有强实时交互性质的数据的。不是 Java 不能这么做,而是它的重点一直不在这方面。  | 
            
     7 
                    
                    airfling      2019-09-25 10:50:20 +08:00 
                    
                    @misaka19000 那就不难理解服务器这么烂了 
                 | 
            
     8 
                    
                    SoarKyle   OP @misaka19000 不可能吧,有出处吗?腾讯不是一向爱用 c++吗? 
                 | 
            
     9 
                    
                    misaka19000      2019-09-25 10:57:25 +08:00    @SoarKyle #7 英雄联盟是 Riot 开发的 
                > we use at least the following languages here C++ (the core game is written in this) Lua (core game) C# (game tools) ActionScript (game hud and pvp.net) Java (platform servers) Erlang (platform servers) Php/sql (web team / platform) http://forums.na.leagueoflegends.com/board/showthread.php?t=16318  | 
            
     10 
                    
                    senninha      2019-09-25 10:57:35 +08:00 
                    
                    超能球球,算强联网即时对战吗?后端就是 Java 开发的。 
                 | 
            
     11 
                    
                    ahmcsxcc      2019-09-25 10:59:21 +08:00 
                    
                    上海有不少游戏公司的后端是 java 开发的 
                但是现在有一部分转 go 了 我上家公司就是用 java 做 fps 没什么压力  | 
            
     12 
                    
                    xiaowangge      2019-09-25 11:07:17 +08:00 via iPhone 
                    
                    Netty 
                Vert.x  | 
            
     13 
                    
                    BBCCBB      2019-09-25 11:07:44 +08:00 
                    
                    微软都能用 c#写游戏后端 
                 | 
            
     14 
                    
                    YUyu101      2019-09-25 11:57:38 +08:00 
                    
                    netty,vertx 呗,已经是 jvm 上最快的框架了,再不行就只能 c++了 
                 | 
            
     15 
                    
                    sunny352787      2019-09-25 12:42:21 +08:00    这贴没几个是做游戏的啊?都是凭感觉猜... 
                其实实际情况是,游戏服务器就没有一个通用的框架或者标准,都是想用啥用啥,如果只看所谓强联网的游戏,只要支持 TCP 或者 WebSocket 就行,经手过的服务器就有 C++,Java,C#,C ( skynet ),Erlang 等等,我自己用的是 go。 如果不限强联网的话,Python,PHP 的我也见过,反正就是看你想用啥,用啥顺手就用啥。  | 
            
     16 
                    
                    MiffyLiye      2019-09-25 12:56:32 +08:00 
                    
                    服务端有 Electronic Arts 开源的 Orbit ( Java ) 
                对标 Microsoft 的 Orleans ( C#)  | 
            
     17 
                    
                    samael      2019-09-25 13:49:35 +08:00 
                    
                    @sunny352787 同意 
                就我所知道,CoC 的服务器就是 Java https://www.pocketgamer.biz/feature/45814/chart-rush-making-of-clash-of-clans/  | 
            
     18 
                    
                    ryd994      2019-09-25 14:04:27 +08:00 via Android 
                    
                    那不就是 Minecraft ?官方服还是单线程的呢 
                后来被微软收购才重写的  | 
            
     19 
                    
                    across      2019-09-25 14:07:02 +08:00 
                    
                    Erlang go  c/c++多少还听过。C#只在一个小团队见过。Java 倒真不知道。 
                 | 
            
     20 
                    
                    zjsxwc      2019-09-25 14:13:00 +08:00 
                    
                    这活 php swoole 都能干 
                 | 
            
     21 
                    
                    sunny352787      2019-09-25 14:15:35 +08:00 
                    
                    @across 韩国游戏大部分都是 C#的,SQLServer 存储过程用到飞起 
                 | 
            
     22 
                    
                    ofblyt      2019-09-25 14:20:41 +08:00 
                    
                    不少游戏的服务端都是 C++,轮子多一些吧,个人感觉 
                 | 
            
     23 
                    
                    zdt3476      2019-09-25 14:29:06 +08:00 
                    
                    就算是强联网其实还是得看具体的游戏类型,不同游戏类型差别还是很大的。不过理论上来说,问题不大。 
                 | 
            
     24 
                    
                    th00000      2019-09-25 14:34:01 +08:00    完全可以,  
                作为游戏从业者可以大概介绍一下; 游戏一般根据类型可以大概来区分开发语言: 比如 SLG, 卡牌类, 这些用 Java 开发一点问题都没有, 而且开发效率很高; 对于消消乐, 养鱼这种游戏, 也没有问题, 因为都是单局玩法, 数据交互量比较小; 对于吃鸡, 跑跑卡丁车这种, 一般局外玩法用 Java 没有问题, 局内就没有用 Java 的了; 对于传统 MMORPG 完全没有用 Java 开发的; 当然不用 Java 开发的部分也不代表就用 C++, 要用的话一般是框架部分用 C++, 主要逻辑会用 Lua 开发, 效率高, 跟 C 结合起来很方便, 比如魔兽世界; 另外不是游戏就是用长连接, 用 Java 也不代表一定用 Netty, 英雄联盟在架构更新之前大部分服务都是基于 http 的, 仅推送服务会使用长连接。  | 
            
     25 
                    
                    lcf0030      2019-09-25 14:43:20 +08:00 
                    
                    我的世界 不就是 java 开发的? 
                 | 
            
     26 
                    
                    SoarKyle   OP @th00000 请教下局内和局外是指的一局游戏? pvp 在线匹配即时对战用 java 呢,人数不多,最多 2v2 
                 | 
            
     28 
                    
                    th00000      2019-09-25 15:00:49 +08:00 
                    
                    @SoarKyle 我可以理解为你们想做一款游戏模式类似<皇室战争>这种模式的游戏吗 
                对于皇室战争来说, 局外就是公会, 排名, 宝箱, 组卡, 局内就是真正开始战斗, 局外这些没问题, 局内你们再仔细考虑考虑  | 
            
     30 
                    
                    abel1989      2019-09-25 15:17:03 +08:00 
                    
                    现在很多服务端都转 go 了 
                 | 
            
     31 
                    
                    CallMeReznov      2019-09-25 15:36:17 +08:00 
                    
                    pomelo 了解一下? 
                 | 
            
     32 
                    
                    sunny352787      2019-09-25 18:57:58 +08:00 
                    
                    @th00000 嗯...我手上过的俩 MMO 是用 Java 写的... 
                 | 
            
     33 
                    
                    YUyu101      2019-09-25 22:07:23 +08:00 
                    
                    即时也有不同类型的吧,有的是客户端状态同步,有的要服务器模拟对局,有的可以靠动画骗过去有的不行,卡牌的不出牌都不用同步,mmo 那种和 fps 又不一样了。 
                 | 
            
     34 
                    
                    KasuganoSoras      2019-09-25 22:18:15 +08:00 
                    
                    Minecraft 了解下? Hypixel 最高峰十几万人在线,全球最大的小游戏服务器,服务端也用的是 Java。 
                 | 
            
     35 
                    
                    hkitdog      2019-09-25 23:26:40 +08:00 via iPhone 
                    
                    Dnf 是用 C++寫的 
                 | 
            
     36 
                    
                    starsriver      2019-09-26 07:20:15 +08:00 via Android 
                    
                    建议 minecraft 节点 
                 | 
            
     37 
                    
                    zazalu      2019-09-26 08:52:45 +08:00 via Android 
                    
                    可以,但是轮子少啊 
                 | 
            
     38 
                    
                    janxin      2019-09-26 09:33:34 +08:00 
                    
                    MMO 看类型吧,有些有 GC 也不是不能接受吧,FPS 这种高实时性要求的也能不怕 GC ?怕不是手游吧... 
                 | 
            
     39 
                    
                    nvioue      2019-09-26 09:40:22 +08:00 via Android 
                    
                    问游戏能不能用 Java 写,太抽象谁都无法回答。你要把问题细化。你的游戏是什么类型,对延迟是否敏感,在每个地图场景会发多少请求,每个请求要求的延迟是多少,你的代码能不能达到?  至于战斗,物品系统更不用说。 
                 | 
            
     40 
                    
                    dreamycloud      2019-09-26 09:55:47 +08:00 
                    
                    Java 内存占用要比 c/c++高,比 go 也高,只有这点必须注意 
                 | 
            
     41 
                    
                    LeeSeoung      2019-09-26 09:58:21 +08:00 
                    
                    之前站内有看到一篇 即时战斗游戏用 java 开发 好像连画面渲染都是用 java。。 
                 | 
            
     42 
                    
                    Michaelssss      2019-09-26 10:15:21 +08:00 
                    
                    理论上我们有 Java RealTime,但是好像也没看到怎么推广,而且这种可预测 GC 时间的算法有很多前置条件,还不如干脆直接用 C++ 
                 | 
            
     43 
                    
                    hkitdog      2019-09-26 11:54:31 +08:00 via iPhone 
                    
                    你们抓包分析下吧,游戏客户端和服务器沟通不是用 restful  
                纯用 tcp socket 的...像 DNF 和 pubg  | 
            
     44 
                    
                    dosmlp      2019-09-26 15:26:31 +08:00 via Android 
                    
                    上 c++就对了,开发效率在游戏服务器这个领域没啥差别,反正都是从 0 开始写的,而且 java 资源占用多,可优化空间也少,至于 c 艹的内存管理,现在都 9102 年了,当然用 c 艹 /14 / 17 / 20 啊 
                 | 
            
     46 
                    
                    livepps      2020-08-13 09:26:01 +08:00 via Android 
                    
                    分进程,也可以说分服务器,战斗服务器用 c++ 写,其他服务器用 java,java 相比 c++ 开发效率确实高,ide 也很好用 
                 |