撸个服务端出来系列(二)

这周解决了几个问题。

1.高并发时多线程处理时的问题,原来设计的时候是每个gamer绑定了一个channel,每个gamer都有一个消息队列。一个时间片中只处理了每个gamer的一条请求。我将其修改成了,一个时间片中处理完所有这个时间片中发出的请求。这样极大地增加了效率。

2.使用了PooledByteBufAllocator 防止内存溢出,将原来程序中频繁用到的size()>0这个操作换成了isEmpty()。因为在某些数据结构的实现中,size()方法会遍历整个链表。

3.设计了下数据库。

4.最后整个逻辑我要怎么串起来还没想好。如何让模块内高聚合,模块间松耦合。根据其他开源游戏引擎的思想,前端服务器进行socket分发,后端服务器之间进行rpc调用。。

时间: 2024-12-21 13:03:56

撸个服务端出来系列(二)的相关文章

撸个服务端出来系列(四)

分布式棋牌游戏服务器中常有n个DBSvr,n个GateWay,n个GameSvr,1个LobbyServer,1个LoginSvr.详见下图: 其他几个都很好理解,但DBMgr或者叫DBSvr的作用是啥?这个我不是特别清楚.从前在金证实习时,李工曾经和我说过大并发情况下他们会将n个sql存起来作为事务一下子执行了. 但我看好像这种的开源实现特别少.有待研究.

iOS xmpp协议实现聊天之openfire的服务端配置(二)

本篇主要说一下如何利用命令行来正确配置MySql. 首先打开终端: 1.为mysql起一个别名 alias mysql=/usr/local/mysql/bin/mysql 2.创建mysql的管理员  admin(后期登陆用到) alias mysqladmin=/usr/local/mysql/bin/mysqladmin 3.设置root账号密码 mysqladmin -u root password 初始密码 4.连接数据库 mysql -u root -p  (提示输入刚才的密码) 5

Linux下多进程服务端客户端模型二(粘包问题与一种解决方法)

一.Linux发送网络消息的过程 (1) 应用程序调用write()将消息发送到内核中 ( 2)内核中的缓存达到了固定长度数据后,一般是SO_SNDBUF,将发送到TCP协议层 (3)IP层从TCP层收到数据,会加上自己的包头然后发送出去.一般分片的大小是MTU(含IP包头),而IPV4下IP的包头长度为40,而IPV6下为60,因此,TCP中分片后,有效的数据长度为MSS = MTU - 40 或 MSS = MTU -60 (4)最终经过其他层的包装,发送到公网上,跑来跑去,这时候,你的数据

NFS服务端环境准备(二)

NFS服务器端的搭建步聚 服务器系统 角色 IP CentOS-64- MrXiong -server NFS服务器端 192.168.221.130 CentOS-64--client NFS客户端 192.168.221.131 服务端配置 检查服务器系统信息 操本系统版本信息: [[email protected] ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [[email protected] ~]# uname -n M

Mina airQQ聊天 服务端篇(二)

Mina聊天服务端实现思路:在用户登录的时候.连接服务端而且验证登录用户,假设成功,则将IoSession保存到map<账号,IoSession>中,而且通知该用户的好友上线,然 后再请求好友列表:若不成功,则断开连接. 自己定义协议格式:包头+包体 包头(10字节):包头长度(short)+ 消息类型(byte)+ 内容类型(byte) +  消息命令(short)+ 包体长度(int) 包体:JSON字符串 自己定义编码解码:因为数据在网络传输过程中都是以二进制传输的,所以我们能够自己定义

微信支付(APP支付)-服务端开发(二 )

如果你已经可以微信支付成功,那么你已经成功90%,剩下的就是订单确认问题了. 接上一篇文章,今天我们来谈一谈,订单查询与确认: APP端支付成功之后,会再次向服务端发起请求,确认付款订单时候成功,同时服务端也要根据订单号更新数据库,确保前后端一直性. 服务端收到APP端发送的请求后,回获取到APP端传递过来的订单号,拿到订单号后,同样的方式,拼接xml格式的字符串,发送微信端,查询订单信息,比如付款是否成功,付款金额,订单详情等等. /调用微信接口,查询订单是否支付成功 public Map<S

TCP/IP网络编程之基于TCP的服务端/客户端(二)

回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服务端的I/O代码 echo_server.c --while ((str_len = read(clnt_sock, messag, 1024)) != 0) write(clnt_sock, messag, str_len);-- 接着,我们回顾客户端的代码 echo_client.c -- wr

c++ Socket客户端和服务端示例版本二

客户端 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <string.h> #include<arpa/inet.h> #include <error.h> #includ

服务端开发笔记二:基于pomelo的分布式手游架构

经过了一个周的时间,新项目的基本结构已经大体确定,拿来给大家分享. 一 基础概念 在说明手游服务器架构之前,一下几点须知. 1 我们的服务器集群分为前端服务器和后端服务器. 前端服务器:负责接收前端请求,实际上只有两个gate和connector: 后端服务器:负责后端服务器相互调用,如auth,area: 虽然在我们写路由的时间直接写的是area中handler下文件中的方法, 但是这是通过connector间接调用的,不要认为area是前端服务器. 2 对于每个单独的服务器,一般由三个可选的