1
bruce0 2022-09-08 09:56:47 +08:00
第一次见用 Java 写游戏服务器的, 插眼学习一下
|
2
newmlp 2022-09-08 09:58:21 +08:00
游戏不是用 udp 加自己魔改可靠连接的多吗,比如 kcp
|
3
RedBeanIce 2022-09-08 09:58:49 +08:00
指不定你发到 Java 节点会更好。。。。。
|
4
robot1 2022-09-08 10:01:21 +08:00
感觉你不太懂游戏开发啊。得了解下基本的游戏开发模式和关注的点吧。
你这感觉还是在搞 web |
5
cqu1980 2022-09-08 10:04:41 +08:00
既然用 node 开发,为啥不用现成的框架,比如 pinus ?
|
6
dk7952638 2022-09-08 10:07:14 +08:00
我有一种偏见,所有带 GC 的编程语言都不适合做游戏开发
|
7
ddonano OP 大佬,所以写的是入门啊
|
10
kwh 2022-09-08 10:18:25 +08:00
可能是连接数量限制???
|
11
robot1 2022-09-08 10:24:17 +08:00
看很多评论关注语言、协议、gc 什么的,
但对于题主来说我觉的还是先看看书资料源码,弄清楚游戏开发的基本知识才是主要的 可以看 quake3 的快照同步,或者别的什么的帖同步,状态同步 ,客户端预测回滚啥的 语言之类的都是用来实现这套模式的工具,可以根据游戏类型灵活选择 |
12
qinxi 2022-09-08 10:25:13 +08:00
nodejs 不是有 socketio. java 可以不用参与了.
非要 java, 不是也有 netty-socketio. 直接 netty 生撸也行 |
13
micean 2022-09-08 10:33:11 +08:00
当前基于 nodejs ,改成 java 的原因是啥?
vertx eventbus 发消息是一个一个发……估计和 nodejs 版本也没啥区别 如果性能符合你的要求也没啥问题 |
14
assiadamo 2022-09-08 10:40:49 +08:00
如果是纯客户端计算,服务器只存个结果,或者演算的话,你用 web 那套没问题
长连接的话,老老实实用 netty 吧 |
15
cqu1980 2022-09-08 10:41:27 +08:00
@robot1 确实是这么个道理,还是要结合一些游戏框架来熟悉分析和理解才行,光靠自己想肯定是不行的。不过 java 的游戏框架不多,可以参考 node 的 pinus/pomelo 。
|
16
ddonano OP @assiadamo https://github.com/quarkusio/quarkus/issues/8805 好像 quarkus 的 websocket 就是基于 netty 的,我也看了源码,有使用到 netty 的 Channel 、ChannelHandler 这些。
|
17
assiadamo 2022-09-08 10:52:14 +08:00
@ddonano 看你需求,如果是 pc 端或者手机端,能用 websocket 为什么直接用 tcp/udp 呢,websocket 用在游戏上可能网页游戏更适合
|
18
allgy 2022-09-08 10:57:44 +08:00
java GC 直接卡你的怀疑人生
|
19
lmshl 2022-09-08 11:09:14 +08:00 1
既然是 Java 的话,akka-cluster-sharding 了解一下,国内腾讯网易淘宝游戏等都有应用,轻松扛百万玩家在线
@allgy 今年是 2022 年,Pauseless GC 已经诞生十几年了 |
20
lmshl 2022-09-08 11:28:30 +08:00
|
22
joesonw 2022-09-08 12:05:24 +08:00 via iPhone
0 游戏基础的 Java 话直接用 SmartFoxServer
|
23
dcoder 2022-09-08 12:23:39 +08:00 3
你们上面滔滔不绝的基本都没说在点子上...
首先该问贴主是做: real-time 的游戏 (e.g. 竞技 ACT, FPS), 还是 turn-based 的游戏? turn-based 的话, websocket 这一套没有问题, 并且 websocket+stateful 的构架 还是比 Restful+stateless 的要难写. 但是要做 real-time 的话, 难度就几何级数上升: 1. 需要在 UDP 上用个快速的传输协议 (比如 KCP). 2. 需要在 server 和 client 端自己计算没帧的物理模拟(哪怕是最简单的也行). server 和 client 可以用不同的语言. 这里水也很深. 竞技游戏的话, 多半会基于 deterministic floating number 做 simulation. MMORPG 的话可以用差值糊弄糊弄, 不用每帧都是精确的 deterministic simulation. |
27
th00000 2022-09-08 16:01:42 +08:00
利益相关, 用 Vert.x 开发过线上吃鸡类游戏
但是 MMO 类型的话有待验证, 毕竟单线程可以容纳的在线人数有限, 吃鸡类就没这个问题, 大厅扩就是了 但是你也说过你的游戏是有房间概念的, 所以我觉得问题不大 另外 Netty 是 Netty, Vert.x 是 Vert.x, 不是两个互斥的技术栈 |
29
cloud107202 2022-09-08 16:06:34 +08:00
shardcake 这种不说成不成熟,effect-system 的框架就这么推荐新手用?
题主就从 linux 最大连接数、web server 线程池、所用具体 websocket 组件的 IO 操作是同步还是异步等几个地方依次排查下就行 压测可以用 galting 的 websocket module ,用 scala 简单写点代码,都是 DSL API 没什么门槛 |
30
q1angch0u 2022-09-08 16:07:29 +08:00
好奇游戏场景下 GC 的 STW 咋处理……
|
31
xf5464 2022-09-08 16:08:06 +08:00
移动同步的话,客户端这边按格子走,然后走到下一格的时候,服务端用上一次收到的移动格子时间和这次的时间差判断,是不是可以移动到当前格子,可以的话通知给其他人。每一格都验证,可能跟你说的移动不是一个事,比如一个格子 64*32 ,那么当客户端移动了很小的一段路,没到下一个格子的时候,是不会通知服务端的,也就不会通知到其他玩家。
|
32
Huelse 2022-09-08 16:20:09 +08:00
@lmshl #19 今天刚看到 akka 改 license 了,不过年收入$2500w 以内问题不大 https://www.lightbend.com/blog/why-we-are-changing-the-license-for-akka
|