呵呵,之所以称作引擎只是觉得这名字比较酷而已。断断续续写了好久了,由于自己是面向对象编程新手,所以只是做了一点浅浅的封装,将网络编程的数据传输模块与逻辑模块隔离,并提供接口供客户端使用。
下面先简单介绍下特点吧。
1,简化了网络编程,使客户只需定制自己的协议与逻辑就可实现各种网络软件。
2, 服务端用Java实现,客户端用C++与Socket实现(有几个线程操作用了Windows API)。 这样编写的原因是,服务器一般有2大流派,*nix与Windows,用java可实现跨平台性,且简易性与稳定性更强。客户端稍微改下也可在*nix平 台使用,但暂时没打算实现。
3,客户端可继承Client类实现逻辑;服务端只需将逻辑类打包放入Plugins目录即可加载。在通信协议里指定逻辑名称,服务端根据逻辑名称动态加载插件,所以一个服务端可同时运行多种逻辑模块。
基本原理:
服务端:1个线程处理用户连接,1个线程读取数据,N个线程处理读入数据,N个线程处理输出数据。
客户端:1个线程读取数据,1个线程处理数据并发送。
等改进的差不多后,我会详细地写一个开发文档出来。现在暂时只提供一个使用NetWay引擎的聊天室例子,由于只是测试引擎,所以代码写得很烂,而且客户端是MFC的。看看即可。。
测试效果:
双击服务端文件夹内的startup.bat后,启动客户端文件夹内的ChatRoom.exe即可,服务端提供了3个插件,但是只使用了ChatRoom.jar。
服务器:
客户端:
最 后,服务器编程是门很高深的学问,国外有很多开源引擎,被各大网游开发商使用,比如ACE libevent RakNet等,都是开源的,ACE与 RakNet太过复杂,感兴趣的可学习下libevent,相对比较简单,貌似国内很多网游开发商就是用的这个引擎。我只是凭兴趣,带着学习的心态写了这 个引擎,也并没有机会进行大规模的系统的测试。随着自己的学习深度,我打算继续改进他。。有兴趣的朋友可以与我交流。。
To Do:
1,提高服务器性能,完善各种BUG。
2,服务端提供数据可持久化,也就是数据库,目前该功能需客户自己实现。
3,服务端加入一些简单安全措施,如简单防御DDOS。
4,支持P2P。需要客户端实现某些服务端功能,服务端则需提供NAT打洞插件。
5,提供UDP通信支持,目前只支持TCP。