- 博客(4)
- 收藏
- 关注
原创 魔兽世界服务端3.3.5版本源码剖析之地图管理
是小格子的坐标,比如0002337表示000是地图标号,x坐标是23,y坐标是37)生成寻路导航数据navMesh,后面的轴对称包围盒碰撞算法(A*算法)用到这个导航数据。静态数据信息的包围盒,包围盒是一个立体空间将物体包围起来,物体与物体之间的碰撞就是包围盒的碰撞,简化了碰撞检测,文件格式有*.wmo、*.m2 对应world map object;合并mmaps_generator和vmap4extrator生成的数据,未来使用vmap4extrator生成的数据就行了,生成*.vmtile文件。
2025-06-28 14:37:54
962
原创 魔兽世界服务端3.3.5版本源码剖析之网络模块
在主线程的循环WorldUpdateLoop()中,默认1ms执行一次sWorld->Update(diff),sWorld->Update中UpdateSessions(diff),更新上面网络线程添加到addSessQueue中的session,取出session的消息队列_recvQueue,并消费消息, 在消费消息中,WorldSessionFilter updater(pSession),这是个过滤器,因为我们处理消息有主世界线程和地图map线程,至此,整个网络消息的处理流程已运行完毕。
2025-06-28 14:25:50
1014
原创 windows IOCP编程
由我们的主线程(或者单例对象)调用PostEvent()往m_hCompletionPort的投递队列投递一个异步请求,工作线程GetQueuedCompletionStatus()成功后会从完成队列取出完成操作并执行pEvent的回调函数。将监听套接字socket与上面创建的m_hCompletionPort绑定,这样,我们就能基于m_hCompletionPort投递我们要对socket的异步操作,这里是对监听套接字socket发起异步连接。第四个参数1:指定允许同时执行的线程数。
2025-06-28 13:56:44
379
原创 网络编程原理之阻塞/非阻塞、同步/异步
阻塞/非阻塞: 阻塞和非阻塞是针对我们某个系统调用来说的,比如recv()/read()发起读取某个acceptSocket数据的系统调用,某个客户端发过来的数据首先会放在操作系统内核的某个缓冲区里,我们应用程序可以通过acceptSocket这个标识符以及recv()/read()系统调用去获取,并且将我们需要获取的数据保存在应用程序的缓冲区里,比如我们需要读取100字节到我们指定的应用程序的缓冲区里,但是实际内核缓冲区不足100字节,那么recv()/read()就会阻塞住应用程序往下运行。
2025-06-28 11:30:07
224
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅