Java 做强联网即时对战的手游服务器的技术可行性?

2019-09-25 10:22:35 +08:00
 SoarKyle

RT,一般强联网即时对战都采用 c++开发,java 是否可行呢? 9102 年了,Java 也有像 netty 这样比较成熟的高性能框架,而且服务器硬件性能也早就不是瓶颈了,开发效率也更高,也更易于维护。c++虽然运行效率高,但开发效率低,也会因为内存管理问题导致难以维护,甚至宕机。不知道两者之间是否还存在其他的一些差别,求教各位 v 友。

6934 次点击
所在节点    程序员
46 条回复
Raymon111111
2019-09-25 10:24:19 +08:00
感觉 gc 一下受不了
luckyrayyy
2019-09-25 10:27:53 +08:00
现在好像几百 GB 级别的 full gc 也可以控制在个位数的毫秒级别了,应该不是问题。我看到一个测试 zgc 回收 128G 内存平均用时 2ms
NotNil1
2019-09-25 10:29:23 +08:00
可以尝试 netty 框架配合新版 jdk 的 zgc。
ZiLong
2019-09-25 10:46:04 +08:00
netty 一般使用的是堆外内存,gc 压力较小,不说 zgc,就 jdk8 以上对 G1 的优化,就基本满足要求,建议使用 jdk11 或者 graalvm.当然,比较稳妥点的是上 C++14/17.
另外,如果业务需求不复杂,愿意尝试,给 rust 一个机会未尝不可.
misaka19000
2019-09-25 10:49:03 +08:00
听过英雄联盟的服务端是 Java 开发的
passerbytiny
2019-09-25 10:49:49 +08:00
技术可行性是肯定有的,但恰恰相反的是,开发效率是没有的,因为 Java 从来没在(低延迟)游戏上有任何平台 /引擎 /框架 /工具的积累。

后面仅是猜测:Java,从以 Spring 为代表的 Web 应用,到 Hadoop、Storm 为代表的分布式系统应用,到像 Kettle 这样的工具性应用,不管处理的是事务性数据、流式数据、异步数据、作业数据,还是大数据,本质上都是离线准实时数据或者数据流(内存数据是镜像);而即时对战游戏,是需要在内存中直接处理有强实时交互性质的数据的。不是 Java 不能这么做,而是它的重点一直不在这方面。
airfling
2019-09-25 10:50:20 +08:00
@misaka19000 那就不难理解服务器这么烂了
SoarKyle
2019-09-25 10:54:43 +08:00
@misaka19000 不可能吧,有出处吗?腾讯不是一向爱用 c++吗?
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
senninha
2019-09-25 10:57:35 +08:00
超能球球,算强联网即时对战吗?后端就是 Java 开发的。
ahmcsxcc
2019-09-25 10:59:21 +08:00
上海有不少游戏公司的后端是 java 开发的
但是现在有一部分转 go 了
我上家公司就是用 java 做 fps
没什么压力
xiaowangge
2019-09-25 11:07:17 +08:00
Netty
Vert.x
BBCCBB
2019-09-25 11:07:44 +08:00
微软都能用 c#写游戏后端
YUyu101
2019-09-25 11:57:38 +08:00
netty,vertx 呗,已经是 jvm 上最快的框架了,再不行就只能 c++了
sunny352787
2019-09-25 12:42:21 +08:00
这贴没几个是做游戏的啊?都是凭感觉猜...

其实实际情况是,游戏服务器就没有一个通用的框架或者标准,都是想用啥用啥,如果只看所谓强联网的游戏,只要支持 TCP 或者 WebSocket 就行,经手过的服务器就有 C++,Java,C#,C ( skynet ),Erlang 等等,我自己用的是 go。

如果不限强联网的话,Python,PHP 的我也见过,反正就是看你想用啥,用啥顺手就用啥。
MiffyLiye
2019-09-25 12:56:32 +08:00
服务端有 Electronic Arts 开源的 Orbit ( Java )
对标 Microsoft 的 Orleans ( C#)
samael
2019-09-25 13:49:35 +08:00
ryd994
2019-09-25 14:04:27 +08:00
那不就是 Minecraft ?官方服还是单线程的呢
后来被微软收购才重写的
across
2019-09-25 14:07:02 +08:00
Erlang go c/c++多少还听过。C#只在一个小团队见过。Java 倒真不知道。
zjsxwc
2019-09-25 14:13:00 +08:00
这活 php swoole 都能干

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603948

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX