![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
服务器
文章平均质量分 68
bestans
这个作者很懒,什么都没留下…
展开
-
golang下极致性能socket开发
优化记录1. SendMessage时,一定是调用方将message转换为[]byte数据序列,避免在其他线程转换时引发并发问题2. socket写数据优化。socket写数据核心流程:message序列化->写入socket,有些socket库,存在重复拷贝的问题,基于核心流程,减少不必要的拷贝和内存分配,进行如下优化:每个连接定义一个write_buffer,用来减少tcp报文数...原创 2020-03-09 18:28:23 · 2206 阅读 · 0 评论 -
游戏服务器设计(golang)
背景使用goroutine 轻轻松松高并发使用nats互连所有server进程,所有消息通过nats中转可扩展:升级nats集群,实现全区全服,动态负载gated处理客户端连接、交互的服务器每一个session分配一个goroutine可以部署多个进程,客户端随机连接其中一个(或者加一个动态负载,控制客户端连接哪个gated)与游戏项目无关连接加一个握手策略,防止ddos攻...原创 2020-01-10 14:54:32 · 838 阅读 · 0 评论 -
游戏服务器设计(C#)简单版
背景充分利用c#中的task机制,设计高并发,无锁(针对业务逻辑)的服务器架构gateserver处理客户端连接、交互的服务器永久性设计,与游戏项目无关,无需新代码维护gameserver逻辑分类,每一类逻辑分配一个task单独处理每个玩家分配一个独立的task (e.g 5000个玩家,需要5000个task)每个帮派分配一个独立的task ( e.g 300个帮派,需要...原创 2019-11-26 10:31:22 · 2499 阅读 · 0 评论 -
C# Task 与 锁
锁一般都是锁线程,例如互斥锁Monitor等多个task可能共用一个线程假如一个task锁住线程,其他共用线程的task会同样等待吗?答案是:不会经过测试得到以下结论:task执行的所在线程会发生变化,所以不用线程锁会锁住同一个线程的其他task,因为其他task会被转换到别的线程继续执行...原创 2019-11-25 19:17:13 · 2912 阅读 · 0 评论 -
游戏服务器设计
线程模型(基于c#)多个线程对应同一个数据队列每个线程对应一个数据队列,可以让一类操作全部放到同一个线程单线程gateserver客户端所有交互都与gateserver进行可以做成永久,与具体游戏项目无关dbserver处理数据存储和读取使用rocksdb进行封装采用事务操作:要么全部成功,要么全部撤销每次操作前:先对所有表按顺序加锁,保证不会死锁;损失部分效率,保...原创 2019-08-30 17:26:13 · 610 阅读 · 0 评论