博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个简单的TCP消息队列
阅读量:6428 次
发布时间:2019-06-23

本文共 889 字,大约阅读时间需要 2 分钟。

hot3.png

经常有人会问我,消息队列你常用的是啥?

我用的是  同学推荐的Beanstalk。这个东东还是非常不错的。
不过有时候我们可能需要更轻巧的实现以满足自己的需求。
让我们来看下什么样的东东可以称之为消息队列。通常所谓队列就是个先进先出的玩意(FIFO)。消息队列就是用来存放消息的队列。因此,队列里边放啥,那是用户需要操心的。
如果是一个内存队列,用C/C++来实现,那就是一个单向链表,用脚本来做,那就是一个数组,只是在存取的时候要牢记,FIFO。
如果是一个放在磁盘上的玩意,那有很多做法。可以用基于单机DB的,如BerkeleyDB,SQLite等,也可用一般的数据库如mysql。当然,不怕麻烦,自己写个文件,定义好格式,做好索引也不难。
我在这里,用perl写个小程序来展示下套在队列这个数据结构外层的网络的框架。
对于TCP服务,最简单的做法是C/S双方约定好格式。简单的格式,通常是:
size | data。
就是说,头部第一个字节表示一次TCP业务的长度,data里边是具体的数据。data里边可能还有具体的业务格式。
对于我们这个最基本的消息对类来说,我们可以这样定义:
消息队列入队列的TCP流为:
两个字节的头+小于65536个长度的消息本身。
从消息队列获取消息:
0x00
格式非常简单。实现也就非常简单。

100513_acaI_1443697.png

程序监听在7070端口,当有客户端链接上来时,先读取头两个字节。如果读到了头两个字节,调用函数,get_size。

100538_0XxR_1443697.png

如果是要获取消息,程序首先检查是否队列里边已经有,有的话,从头部拿出一个来,返回给客户端。如果没有,将客户端的请求句柄压入等待队列。

如果是客户端请求把消息放入队列,则,继续获取消息本身。
到此,一个最基本的框架就搭好了。
简单测试下来,性能还可以,QPS基本上可以达到10000左右。
对于很多不太喜欢使用裸TCP的人来说,基于HTTP的消息队列可能更有需求。我们下一篇在介绍。不过如果消息本身比较短小的话,HTTP的效率还是低了点。

转载于:https://my.oschina.net/pikeman/blog/194903

你可能感兴趣的文章
技术助力第三次革命
查看>>
《HTML与CSS入门经典(第8版)》——2.6 总结
查看>>
新手指南:在 Ubuntu 和 Fedora 上安装软件包
查看>>
在 CentOS7.0 上搭建 Chroot 的 Bind DNS 服务器
查看>>
大型网站的 HTTPS 实践(二):HTTPS 对性能的影响
查看>>
《Swift 权威指南》——第6章,第6.10节嵌套函数
查看>>
《自己动手做交互系统》——1.3 本章小结
查看>>
Mobile devices bundled with malware?
查看>>
《JavaScript面向对象精要》——1.5 访问属性
查看>>
《Python数据可视化编程实战》—— 第 1 章 准备工作环境
查看>>
Android应用性能优化最佳实践.1.1 Android Studio的优势
查看>>
《设计模式解析(第2版•修订版)》—第2章 2.2节什么是UML
查看>>
【直播】APP全量混淆和瘦身技术揭秘
查看>>
10个大坑,当你产品上架AppStore会遇到
查看>>
【shell 脚本】两种登录方式
查看>>
学习编程的方法
查看>>
升级linux自带的Python
查看>>
百度地图2.0瓦片地址获取(窗口内瓦片)
查看>>
我的友情链接
查看>>
.JDK1.6安装配置后的测试
查看>>