Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MOOON-server新消息处理接口

MOOON-server新消息处理接口

作者头像
一见
发布于 2018-08-07 09:16:09
发布于 2018-08-07 09:16:09
45300
代码可运行
举报
文章被收录于专栏:蓝天蓝天
运行总次数:0
代码可运行

    MOOON-server提供了一个通用的TCP框架,并对包的解析抽象出了IPacketHandler接口,这个接口提供了无限制的宽容度,支持任何协议,但是增加了使用复杂。

    由于大多数协议,都会定义一个消息包大小字段,基于这个前提,MOOON-server引用了新的接口IMessageObserver,它能够解析任何包头是net::TCommonMessageHeader的消息,在一个包解析完整后(包括包头和包体都已经接收完成),通过回调on_message()将消息传递给使用者,这样就大大简化了MOOON-server的编程。

下面是接口的定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/***

 * 消息观察者

 * 收到一个完整的消息时调用

 * 如果你的消息头和net::TCommonMessageHeader一致,

 * 则建议使用IMessageObserver,而不是IPacketHandler,

 * IMessageObserver相对于IPacketHandler是更高级别的接口

 */

class CALLBACK_INTERFACE IMessageObserver

{

public:

    virtual ~IMessageObserver() {}



 /***

 * 收到一个完整消息时被回调

 * @request_header 输入参数,收到的消息头

 * @request_body 输入参数,收到的消息体


     *  这里需要注意,框架不会释放request_body的内存,需要使用者去释放
      *  释放方法为:delete []request_body;,否则将有内存泄漏
 * @response_buffer 输出参数,发送给对端的响应,默认值为NULL

 *  请注意*response_buffer必须是new char[]出来的,

 *  并且将由框架delete []它

 * @response_size 输出参数,需要发送给对端的响应数据字节数,默认值为0

 * @return 处理成功返回true,否则返回false

 */

    virtual bool on_message(const net::TCommonMessageHeader& request_header

 , const char* request_body

 , char** response_buffer

 , size_t* response_sizer) = 0;



 /***

 * 连接被关闭

 */

    virtual void on_connection_closed()

 {

 }



 /***

 * 连接超时

 * @return 如果返回true,确认是连接超时,连接将被关闭

 *        ;否则表示并未超时,连接会继续使用,同时时间戳会被更新

 */

    virtual bool on_connection_timeout()

 {

        return true;

 }



 /***

 * 包发送完后被回调

 * @return util::handle_continue 表示不关闭连接继续使用,

 *         返回其它值则会关闭连接

 */

    virtual util::handle_result_t on_response_completed()

 {

 //return util::handle_close; // 短连接时

        return util::handle_continue; // 长连接时

 }

};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012/07/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot 搭建 SSE
https://www.51cto.com/article/798001.html
飞询
2025/08/01
1350
SpringBoot 搭建 SSE
鹅厂开源框架tars之网络层实现
tars开源框架地址:https://github.com/Tencent/Tars
皮皮猪头
2019/03/01
5.9K0
教你从头写游戏服务器框架
大概已经有差不多一年没写技术文章了,原因是今年投入了一些具体游戏项目的开发。这些新的游戏项目,比较接近独立游戏的开发方式。我觉得公司的“祖传”服务器框架技术不太适合,所以从头写了一个游戏服务器端的框架,以便获得更好的开发效率和灵活性。现在项目将近上线,有时间就想总结一下,这样一个游戏服务器框架的设计和实现过程。
韩伟
2019/01/30
4.4K1
教你从头写游戏服务器框架
MOOON-agent发布:MOOON-agent系统设计与使用说明
6) 可选多种心跳方式,简单心跳不附带数据,富心跳可携带系统状态数据,如CPU使用率、内存使用情况等
一见
2018/08/07
8370
MOOON-agent发布:MOOON-agent系统设计与使用说明
【Servicemesh系列】【Envoy源码解析(三)】一个Http请求到响应的全链路(二)
上一章节讲到了FilterManager通过对Read Filter进行流程拼装,以下接着以最核心的路由功能为例,来串联整个请求发送的流程。
吃橙子的狐狸
2019/02/28
1.8K0
Python 中实现聊天客户端库
在 Python 中实现一个简单的聊天客户端库可以通过使用 socket 模块来处理网络通信。我们可以构建一个基于 TCP 的简单聊天系统,其中包括一个服务器和一个客户端。
华科云商小徐
2024/08/02
2080
mooon-agent接收状态机代码摘要
recv_machine.h #ifndef MOOON_AGENT_RECV_MACHINE_H #define MOOON_AGENT_RECV_MACHINE_H #include <agent/message.h> AGENT_NAMESPACE_BEGIN class CAgentThread; class CRecvMachine { private: /*** * 接收状态值 */     typedef enum recv_state_t {      
一见
2018/08/07
3110
nginx upstream模块完整逻辑源码分析
1.启动upstream。 2.连接上游服务器。 3.向上游发送请求。 4.接收上游响应(包头/包体)。 5.结束请求。
stan1ey
2021/01/23
3.2K0
[源码分析] 消息队列 Kombu 之 Consumer
本系列我们介绍消息队列 Kombu。Kombu 的定位是一个兼容 AMQP 协议的消息队列抽象。通过本文,大家可以了解 Kombu 中的 Consumer 概念。
罗西的思考
2021/03/11
7600
[源码分析] 消息队列 Kombu 之 Consumer
SSE 服务端消息推送
SSE 它是基于 HTTP 协议的,一般意义上的 HTTP 协议是无法做到服务端主动向客户端推送消息的。有一种变通方法,就是服务器向客户端声明,发送的是流信息,本质上,这种通信就是以流信息的方式。
默存
2022/12/03
2.3K0
基于C++、JsonCpp、Muduo库实现的分布式RPC通信框架
RPC(Remote Procedure Call,远程过程调用 )允许程序调用远程计算机上的服务或函数,而无需显式编写网络通信代码,就像调用本地函数一样方便地调用远程服务的函数。
_小羊_
2025/05/03
3490
基于C++、JsonCpp、Muduo库实现的分布式RPC通信框架
大神驾到 | 腾讯光子大牛的 Cocos Creator 网络通用框架(强势围观)
作者,宝爷。宝爷是光子工作室的开发工程师,谦称自己为一枚码农,是一个热爱游戏、热爱开发、热爱学习并坚持沉淀知识的开发者,曾写过《精通 Cocos2d-x 游戏开发》基础卷与进阶卷,感谢宝爷为社区所做的贡献!
张晓衡
2019/11/08
6.6K2
大神驾到 | 腾讯光子大牛的 Cocos Creator 网络通用框架(强势围观)
初探Burp Suite API 开发
要使用python进行BurpSuite插件的开发需要安装Jython。下载地址:http://www.jython.org/downloads.html
漏斗社区
2018/07/26
2.5K0
初探Burp Suite API 开发
Python如何调用港股行情接口
只需要在type中传入STOCK_US,或者STOCK_CN即可查询所有美股或A股的清单。
用户11728277
2025/07/01
1410
接口OkHttp系列(一)- 简介、安装部署、Get请求、Post请求
HTTP是现在主流应用使用的网络请求方式,用来交换数据和内容。OkHttp是一个很棒的适用于Android和Java应用程序的HTTP和HTTP/2客户端,它是一个第三方类库,由移动支付Square公司贡献,这是一个开源项目,用于替代HttpUrlConnection和Apache HttpClient。
wangmcn
2022/07/25
1.7K0
接口OkHttp系列(一)-   简介、安装部署、Get请求、Post请求
Python远程操作Oracle实现一键备份还原数据库演示,利用socket进行imp、exp一键导入导出oracle数据库dmp文件
首先看下效果图,工具是在服务端进行启用的,本地给服务端发送了命令,服务端就开始进行数据库导入操作了。
小蓝枣
2021/08/12
8110
Python远程操作Oracle实现一键备份还原数据库演示,利用socket进行imp、exp一键导入导出oracle数据库dmp文件
网关基于Netty 在Http 协议的实践
我们网关现在完全基于netty 实现http 协议,包含客户端和服务端,http 客户端有很多选择,比如 HttpClient ,jdk 自带的等,都能模拟http ,但是和netty 相比,netty 支持堆外内存,而且内存自己管理,不需要频繁的申请和回收,可以减少GC的压力,以及极致的优化。所以netty http 协议是实现http client的首选。
架构之家
2022/07/12
1K0
网关基于Netty 在Http 协议的实践
接口OkHttp系列(二)- Json格式、Header、Cookie、模拟浏览器
使用header(name,value)来设置HTTP头的唯一值(如果name已经存在,将会移除该name对应的value,然后将新value添加进来,即替换掉原来的value值)。
wangmcn
2022/07/25
1.2K0
接口OkHttp系列(二)- Json格式、Header、Cookie、模拟浏览器
多图详解kafka生产者消息发送过程
KafkaProducer通过解析producer.propeties文件里面的属性来构造自己。 例如 :分区器、Key和Value序列化器、拦截器、RecordAccumulator消息累加器 、元信息更新器、启动发送请求的后台线程
石臻臻的杂货铺[同名公众号]
2022/09/26
7300
多图详解kafka生产者消息发送过程
KafkaProducer通过解析producer.propeties文件里面的属性来构造自己。 例如 :分区器、Key和Value序列化器、拦截器、RecordAccumulator消息累加器 、元信息更新器、启动发送请求的后台线程
石臻臻的杂货铺[同名公众号]
2022/04/30
1.9K0
多图详解kafka生产者消息发送过程
推荐阅读
相关推荐
SpringBoot 搭建 SSE
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验