上一页 1 2 3 4 5 6 7 ··· 10 下一页
摘要: 测试环境 intel-i5 双核 2.53HZ 服务器客户端均在本机运行测试内容:echo回射,每个包的字节数在20字节内luanet连接数 每秒回射数 1 19,000/s10 12,5000/s100 12,0000/s100... 阅读全文
posted @ 2014-04-30 16:01 sniperHW 阅读(1667) 评论(1) 推荐(0) 编辑
摘要: luanet最初只是一个网络框架,它简单的封装了一些网络相关接口然后暴露到lua中,让lua可以构建简单的网络应用.随着我的手游服务器的开发,我发现在C语言中要实现一个简洁易用的RPC调用接口并不容易,于是开始考虑将整个服务器框架从主C,辅lua的模式转变成主lua,辅C的模式.网络通讯,异步日志等... 阅读全文
posted @ 2014-04-17 11:42 sniperHW 阅读(7384) 评论(2) 推荐(3) 编辑
摘要: 本文只介绍epoll的主要流程而不是分析源代码,如果需要了解更多的细节可以自己翻阅相关的内核源代码.相关内核代码:fs/eventpoll.c判断一个tcp套接字上是否有激活事件:net/ipv4/tcp.c:tcp_poll函数每个epollfd在内核中有一个对应的eventpoll结构对象.其中关键的成员是一个readylist(eventpoll:rdllist)和一棵红黑树(eventpoll:rbr).一个fd被添加到epoll中之后(EPOLL_ADD),内核会为它生成一个对应的epitem结构对象.epitem被添加到eventpoll的红黑树中.红黑树的作用是使用者调用EPOL 阅读全文
posted @ 2014-03-23 18:43 sniperHW 阅读(7782) 评论(0) 推荐(0) 编辑
摘要: 续上篇,本篇介绍一个完整的golang文件传输服务器。完整的代码可以看服务器,客户端网络使用的框架如上篇介绍,这里就不再复述.首先定义3个命令码:const ( request_file = 1 file_size = 2 transfering = 3)request_file用于请求文件传输,附带的命令参数是文件key.file_size用于通告客户端文件的大小.transfering用于传输文件内容,附带参数是文件内容的二进制数据.服务器的文件配置示例../learnyouhaskell.pdf=haskell../golang.1.1.2.chm=golang../N... 阅读全文
posted @ 2014-03-07 22:27 sniperHW 阅读(7089) 评论(2) 推荐(0) 编辑
摘要: 学习golang的时间断断续续加起来也有将近一个月了,这期间都是偶看翻几页书,没有写过实际的代码.最近做一个app项目,是一个展示类 的软件,当客户要看某个图片时首先向服务器发出一个请求,比对图片的版本,如果版本与本地一致,则直接显示,如果版本落后了则由服务 器将最新的版本发送给客户端.对服务器的需求就是一个简单的版本比对和文件传输,于是打算用go去实现,正好也可以练练手.在设计上,受到以往框架设计的影响,还是使用了wpacket,rpacket和共享buffer这个方案,不同的地方是go的网络API不支持gather io,所以buffer没有被实现为buffer list,而是一整块的连续 阅读全文
posted @ 2014-03-04 21:48 sniperHW 阅读(3799) 评论(2) 推荐(1) 编辑
摘要: 有了tcmalloc和jemalloc,在大多数情况下我们都没有必要再自己写通用的内存分配器(应该说对于极大多数的程序员,都不可能写出比这个两个更好的通用内存分配器)。但是,如果对性能有极致的要求,写一个比通用内存分配器效率更高的池式对象分配器是可能的。一个最简单也高效的实现就是freelist,每次分配的时候从freelist中get一个,释放的时候put回去就好了。其实现在单线程下是相当简单的,也就几十行代码。但是在多线程的环境下,问题稍微复杂一点,因为可能有多个线程需要操作freelist,那么就要用锁去保护这个freelist,每次get和put的时候都要加锁显然会导致freelist 阅读全文
posted @ 2014-03-01 23:03 sniperHW 阅读(1174) 评论(1) 推荐(0) 编辑
摘要: 博客搬家到了github,地址:http://sniperhw.github.io欢迎新老朋友过来踩踩 阅读全文
posted @ 2014-02-16 18:06 sniperHW 阅读(308) 评论(1) 推荐(0) 编辑
摘要: 大挑战是一款手机休闲网络游戏,游戏形式为开房间,每个房间内最大能容纳20名玩家游戏.##服务器结构划分服务器按功能分成3类:1. redis服务器,负责数据的存储2. 主逻辑服务器,战斗等游戏逻辑的处理3. 网关服务器,负责用户的接入和账号验证先期考虑一个服务器组能容纳5W人同时在线,需部署3台服务器,基本配置如下:1. redis服务器, 4核心cpu,64GB内存,3T硬盘,高主频2. 主逻辑服务器, 16核心cpu,64GB内存,1T硬盘,高主频3. 网关服务器,8核心cpu,16GB内存,500GB硬盘,一般即可 服务器逻辑视图 -... 阅读全文
posted @ 2014-01-21 12:46 sniperHW 阅读(1377) 评论(3) 推荐(1) 编辑
摘要: ##使用kendynet构建异步redis访问服务最近开始在kendynet上开发手游服务端,游戏类型是生存挑战类的,要存储的数据结构和类型都比较简单,于是选择了用redis做存储,数据类型使用string基本就足够了。于是在kendynet上写了一个简单的redis异步访问接口.###设计理念1.项目时间紧迫,不打算提供一个大而全的访问接口,只提供一个request接口用以发出redis请求.2.数据在redis中key和value都存储为string,由使用者负责将数据序列化成string,从string反序列化回数据.3.服务支持本地访问和远程访问,服务自动根据请求发起的位置将结果返回给 阅读全文
posted @ 2014-01-20 22:21 sniperHW 阅读(1140) 评论(0) 推荐(0) 编辑
摘要: 网游服务器大多提供了网关服务,用于作为用户和内部服务器组之间通信代理.网关服务一方面将用户消息从客户端分发到正确的内部服务器.另一方面将来自内部服务器的数据包转发给客户端.一般对于网关应用来说,压力最大的就是广播服务。一个用户的在游戏中产生的行为消息可能要广播给周数百个能看得见他的其它玩家.下面用kendynet编写一个简单的网关服务,当然这只是一个示例程序,它只是简单的把来自一连接的数据发往另一个连接.真实网络游戏中的网关服务要复杂得多.首先介绍一下基本设计,static msgdisp_t disp_to_server;static msgdisp_t disp_to_client;s.. 阅读全文
posted @ 2014-01-14 17:01 sniperHW 阅读(1676) 评论(0) 推荐(2) 编辑
上一页 1 2 3 4 5 6 7 ··· 10 下一页