前言: 想通过模块化,一步步实现一个完整的游戏服务端, 所以除了模块以外的功能都不关心,类似Kiss原则,反倒比以前一锅大杂烩的更好。
目标: 一个轻量级的跨平台网络库, ace, boost太庞大, 所以自己实现了个。
实现: 目前支持select, iocp, 以后支持epoll.
接口:
-
class YYNet
-
{
-
public:
-
YYNet(OnConCallback onCon, OnDisConCallback onDis, OnReadCallback onRead);
-
~YYNet();
-
-
//连接
-
bool connect(const char* ip, int port, sint64& connID);
-
-
//监听
-
void listen(const char* ip, int port);
-
-
//发送消息
-
void send(sint64 connID, const char* buf, int len);
-
-
//关闭连接
-
void close(sint64 connID);
-
-
//循环监听网络事件
-
void eventLoop();
-
private:
-
YYNetImpl* m_impl;
-
};
测试用例:
-
int main()
-
{
-
-
NetEvent net_event;
-
-
//网络事件
-
YYNet net(
-
MakeDelegate(&net_event, &NetEvent::onCon),
-
MakeDelegate(&net_event, &NetEvent::onDisCon),
-
MakeDelegate(&net_event, &NetEvent::onRead));
-
-
//连接服务器
-
uint64 connID=0;
-
net.listen("127.0.0.1", 5001);
-
-
printf("listen on 127.0.0.1:5001\n");
-
-
while(true)
-
{
-
try{
-
net.eventLoop();
-
}catch(Exception& err)
-
{
-
printf(err.what());
-
}
-
}
-
-
return 0;
-
}
除了网络库, 服务端通常会用到很多系统api, 为了方便以后跨平台, 封装了一些常用的api, 如时间, 文件等。
网络库代码:
yy_net_only.zip
测试代码:
test.zip
网络+常用api的代码:
yy.zip
阅读(610) | 评论(0) | 转发(0) |