k-cs
我查看了1710协议,发现实现一个服务端其实并不太难,只是很费时.
服务端瞎几把设计步骤大概是:
1.实现通信协议
2.设计游戏数据和算法(nbt,玩家数据,区块数据,水流动,红石电路等等)
3.设计API(比如直接支持bukkitAPI是最好的,不过这得用CNI或者JNI吧,不懂这个)
4.完成设计并测试运行
现在服主对服务端的需求大概是以下几个方面(需求分析):
1.插件,mod支持
2.性能(内存占用,cpu利用率,带宽占用)
3.多服(比如bc)
4.安全(防止各种攻击啦,比如假人,motd,tab,nbt,还有某些mod漏洞)
5.普及度(sponge至今没有普及的原因就是服主很顽固)

而我准备做的服务端就是能够满足各种需求的嘛,特点是开源,速度快(多线程+libuv,而且C++写的肯定不太慢,虽然我C++水平不怎么样),内存占用小,支持bukkitAPI(麻烦事,支持lua倒是简单不少),分布式(服务端支持在多个实体机使用,数据可在服务端间快速传输,只有一个服务端提供玩家登录功能,类似BC)


目前进度:只用libuv实现了一部分协议,对游戏数据和运算没有任何处理,更没有布置分布式的框架.

做它的最大的原因当然是写着玩,就算写出来其实也没人用,提高技术or完成目标.
欢迎各位讨论,指正,批评


k-cs
源代码地址->https://gitee.com/lona/MCPTT(只开源了一部分,目前只能用作压测器)

Yaossg
你说的“C++水平不怎样”具体如何,我能否给予帮助?

k-cs
姚氏帅哥 发表于 2017-11-23 22:07
你说的“C++水平不怎样”具体如何,我能否给予帮助?

肯定可以啊,一起开发最好了,我C++两年工作经验(学了5年),但是水平真的很一般。

zlzchuyue
最关键的是能够坚持做完,并且坚持维护

k-cs
zlzchuyue 发表于 2017-11-24 01:01
最关键的是能够坚持做完,并且坚持维护

确实,这个很重要,曾经挖太多坑了

SmallFatCYW
本帖最后由 SmallFatCYW 于 2017-11-24 20:02 编辑

话说为什么不支持SpongeAPI,不过也是,设计的虽好,可插件数量完全不比bukkit。。。
不过为了分布式服务器,新写一个端,真的有必要吗?为什么不直接用BC蹦极服。。。写几个插件自动把玩家传送到不同的服务器不是更方便?并且目前主流服务器如hypixel都是这么做的吧。(当然你目的不只是为了能负载更多玩家的话,就当我不存在吧2333)

不过我以前也曾设想过几个服务端读写一张地图怎么样(我知道文件在单位时间内只能一个程序读写,所以用数据库喽。。。把地图分割分别储存在不同的表里,反正目前主流生存服不都限制了地图大小吗,所以一次生成就行了,不过具体运行效率我也不知道会怎么样。。。因为电脑没有了啊QAQ,还是以后慢慢研究吧。。。)

哦对,我记得论坛里曾有个搬运贴,搬运了国外一个C还是C++写的服务端,支持用lua写插件,或许你可以参考参考:P

k-cs
SmallFatCYW 发表于 2017-11-24 20:00
话说为什么不支持SpongeAPI,不过也是,设计的虽好,可插件数量完全不比bukkit。。。
不过为了分布式服务器 ...

感谢你认真的回复。
支持spongeAPI应该是可以的,不过我个人时间不够没列举出来,再加上我做过的东西都是bukkitAPI所以没有考虑到它(使用太少了)。
分布式是准备参考HDFS和spark来提供数据同步和运算支持,所以数据库啊,本地IO这些已经被封装好了,其效率还是不错的就是要解决高延时的问题,比如把地图分区域交给不同服务端来执行达到负载均衡,而不是单纯的提交所有数据和运算过程到云上。
国外的那个你应该是指cuberite吧,它的设计确实很棒,不过嘛,我就是想自己写一个玩玩

q549365815
为什么不用Go开发呢
Go开发更方便吧  在github上有封装好的Minecraft网络库

我想参考你的源码尝试用php实现(虽然这听起来很疯狂而且不太可能,但是尝试一下还是可以的

k-cs
Prismaillya 发表于 2017-11-28 13:17
我想参考你的源码尝试用php实现(虽然这听起来很疯狂而且不太可能,但是尝试一下还是可以的 ...

目前阶段已开放的源代码随便用嘛,php实现是可以的,祝你成功

k-cs
q549365815 发表于 2017-11-28 01:49
为什么不用Go开发呢
Go开发更方便吧  在github上有封装好的Minecraft网络库

因为Go语言我不了解,并且写这个项目的目的只是玩,没想过能够拿来大规模运用

q549365815
k-cs 发表于 2017-11-28 15:56
因为Go语言我不了解,并且写这个项目的目的只是玩,没想过能够拿来大规模运用 ...

嗯...  那祝你成功
倒是可以使用java + c++
java做中间件
c++处理数据操作

k-cs
q549365815 发表于 2017-11-28 21:52
嗯...  那祝你成功
倒是可以使用java + c++
java做中间件

嘛,其实c+++java更好。。。java只负责提供与现有服务端兼容的功能,主体还是c++。而且似乎libgccjit很好用。

q549365815
k-cs 发表于 2017-11-28 22:46
嘛,其实c+++java更好。。。java只负责提供与现有服务端兼容的功能,主体还是c++。而且似乎libgccjit很好 ...

java可以处理网络操作 和 对插件的兼容
c++可以对chunk 地图生成 进行处理

貌似这样就不错

不过还是建议Go  Go秒一切

第一页 上一页 下一页 最后一页