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