分享一直在维护简单实用高效的C++Socket框架Swa-server(开源+源码)

Swa-server 开源框架
* 适用于中小型游戏,如:养成、RPG、棋牌等;应用软件,如:聊天室等
* 已经封套好底层socket管理,sql请求处理、数据加密解密
* 拿来即可开工写业务
* Swa-server是面向小型快速开发的框架,所以采用单进程模式,以后更新也是单进程方案去解决所遇到的问题,这样可以减少开发时间与人力(其实很多服务器用单进程就够了)

* 支持IO异步(基于boost库IO)
* 支持sql异步执行(有回调函数)
* 玩家管理器
* 数据库管理器

项目中例子
* 1、请求获得动态密码
* 2、请求登录(包括mysql查询处理返回等)

安装流程
* 1、安装一个vs2012
* 2、下载本项目的代码
* 3、下载第三方库(boost与mysql),mysql已经编译好地址:http://pan.baidu.com/s/1qW7b42S,boost版本过大,自行到官网下载,版本为1.55
* 4、安装mysql数据库,并导入项目的sql文件
* 5、编译运行,使用项目中客户端测试

结构图:

Shared为了个静态共享库,该库主要包括了socket管理,数据库管理

运行图

服务器启动过程 (下面代码):

int main(int argc, const char * argv[])
{
	// 初始化服务器所都要准备好的数据
	Init();

	// 启动服务
	ServerStart();

	// 执行退出的相关操作
	RunServerExit();

	return 0;

}

void Init()
{

	// 初始化化协议
	InitNetMsg();

	// 加载配置
	g_rGameCfg.LoadRes( "../conf/gameconfig.xml" );

	// 服务器相关配置
	const GameConfigInfo& rGameCfgInfo = g_rGameCfg.GetGameConfigInfo();

	// 加载服务器需要的资源
	g_rResourceMgr.LoadAllRes(rGameCfgInfo.arrConfigPath);

	// 初始化数据库
	if(DBServerInit(rGameCfgInfo))
	{
		// 初始化Scoket服务
		gNetServer = NetServerMgr::Instance()->AddNetServer();
		gNetServer->SetAddress( rGameCfgInfo.arrServerHost , rGameCfgInfo.nServerPort);
		gNetServer->SetHandler( OnNetMsgEnter , OnNetMsg , OnNetMsgExit );

		// 初始化待连接玩家数据
		g_rPlayerMgr.Init(*gNetServer);

		// 启动Socket服务
		gNetServer->Start();

		FLOG4( "SERVER STARTED." );

		// 辅助命令初始化
		gGameCommand.Init();
	}
}

启动过程做好一切初始化的工作,加载配置、创建所有的socket、player、数据库对象等,然后设置socket连接、收到消息、退出的回调函数

这里的socket与player的实例ID是一样的,他们也绑定在一起管理,这样很方便

当一个socket进来就可以直接到了player,当一个socket退出,这时会初始化player与socket数据,然后再设定他们重新等待连接进入

主要代码在NetSocket,NetServer,Playaer

NetSocket

NetServer::NetServer()
		:   m_cAcceptor( *this )
	{
		static int32 s_nIncreaseNetServerID = 0;
		m_nServerID = ++s_nIncreaseNetServerID;
		for ( int i = 0 ; i < MAX_SOCKET_CONNECT ; i++ )
		{
			m_arrSocket[ i ] = new NetSocket( *this );
		}
	}

Player

void PlayerMgr::Init(NetServer& rNetServer)
{
	for ( int32 i = 0 ; i < MAX_SOCKET_CONNECT ; i++ )
	{
		SWA::NetSocket& pSocket = rNetServer.GetSocket(i);
		ASSERT(pSocket.SID() == i);
		m_arrPlayerCache[i] = new Player(pSocket);
	}
}

如果园友想直接用,就直接看例子代码即可上手,如果想研究了解,则多看Shared中的NetSocket,NetServer,NetIOBuffer类等类

如果园友有什么问题可以在这里提问,或联系我QQ:296464231

源码已经放到了github : https://github.com/huangzuduan/swa-server

时间: 2024-07-31 06:27:09

分享一直在维护简单实用高效的C++Socket框架Swa-server(开源+源码)的相关文章

C# IOCP完成端口模型(简单实用高效)

1.在C#中,不用去面对完成端口的操作系统内核对象,Microsoft已经为我们提供了SocketAsyncEventArgs类,它封装了IOCP的使用.请参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1. 2.我的SocketAsyncEventArgsPool类使用List对象来存储对

实用高效,27款腾讯热门开源项目推荐

腾讯作为互联网行业的一大巨头,一直都不吝啬将好的技术开放,与广大开发者共享,未来也将推出VR开放平台和AI技术.腾讯在全球合作伙伴大会披露了未来五年的发展思路,在技术共享方面,腾讯希望利用自己在新技术方面的积累,给开放平台带来更多技术合作和商业发展机会. 本文为大家整理出27款当前使用较多,口碑较好的腾讯开源软件,这些工具在一定程度上为日常办公节省了时间及人力成本,提高了工作效率.希望它们能给你和你的团队带来便利. 1. WeUI WeUI 是由微信官方设计团队专为微信移动 Web 应用设计的

jquery.validate.js【简单实用的表单验证框架】

在线演示1 本地下载 原文链接:http://www.gbtags.com/gb/share/5749.htm 最近在做用户登录.注册.以及用户中心...然后之前在慕课网学的jquery.validate用得着地方了,根据自己需求进行了细节修改,重要是样式方面吧. 第一次发表这些,说得不好不要介意,开始吧.首先: $("#form").validate({ //在这里面编辑 }); 验证的时候常常需要调试,该框架内置了一个方法,如下: debug:true, //调试模式(并不会提交)

jquery.validate.js【简单实用的表单验证框架】【进阶版】

这个是这个插件的官网和我找到的一个中文博客.(虽然插件的名字叫做jquery.validte.js,但其实,这个插件的名字叫jquery validation). 基础的用法可以去看冷子欲的文章或者上面的博客,我这里就不详细介绍了. 首先最重要的一点,所有要验证的域都要在form里,同时这些域都要有name属性. 详细内容请见原文链接:http://www.gbtags.com/gb/share/5765.htm 1. 默认validate参数的初始化: 这个插件如果要用,肯定很多页面都会用到,

介绍jquery.validate.js简单实用的表单验证框架

在线演示1 本地下载 最近在做用户登录.注册.以及用户中心...然后之前在慕课网学的jquery.validate用得着地方了,根据自己需求进行了细节修改,重要是样式方面吧. 第一次发表这些,说得不好不要介意,开始吧.首先: $("#form").validate({ //在这里面编辑 }); 验证的时候常常需要调试,该框架内置了一个方法,如下: debug:true, //调试模式(并不会提交) 来个实例,HTML: <div class="form-group&qu

分享《贝叶斯思维:统计建模的Python学习法》+PDF+源码+Allen B.Downey+许杨毅

下载:https://pan.baidu.com/s/130Wf-CymOIW4ELlh9ihVlg 更多资料分享:http://blog.51cto.com/14087171 <贝叶斯思维:统计建模的Python学习法>高清中文版PDF+高清英文版PDF+源代码 高清中文版PDF,带目录和书签,文字能够复制粘贴:高清英文版PDF,带目录和书签,文字能够复制粘贴:中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 其中高清中文版如图: 原文地址:http://blog.51cto.c

分享《深度学习入门:基于Python的理论与实现》+PDF+源码+斋藤康毅+陆宇杰

下载:https://pan.baidu.com/s/1FYcvG1tB__ooitilMpJC7w 更多资料分享:http://blog.51cto.com/14087171 <深度学习入门:基于Python的理论与实现>高清中文版PDF+源代码 高清中文版PDF,314页,带目录标签,可复制粘贴,高清晰.配套源代码. 深度学习真正意义上的入门书,深入浅出地剖析了深度学习的原理和相关技术.书中使用Python3,尽量不依赖外部库或工具,从基本的数学知识出发,带领读者从零创建一个经典的深度学习

简单的JDBC的增删改查操作,附源码

1 package com.xyyz.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 8 public class JDBCDemo { 9 10 public static void main(String[] args) throws Exception { 11

分享WEBAPP利用纯HTML5实现拨打电话,打开相册,打开摄像头源码

一:实现打电话或发短信 <a href="tel:10086">拨打10086</a> <a href="sms:10086">发短信</a> 二:实现打开相册 <input type="file" accept="image/*"/> 三:实现打开相机 <input type="file" capture="camera"