消息队列实现即时通讯

</pre>发送端和接收端都可以发送和接收信息,只是发送和接收消息的类型不同,一个是1,一个是2.具体代码如下:<p></p><p></p><pre code_snippet_id="666150" snippet_file_name="blog_20150513_3_8263799" name="code" class="cpp"><pre code_snippet_id="666150" snippet_file_name="blog_20150513_2_5260248" name="code" class="cpp">//发送端

#include<stdio.h>#include<stdlib.h>#include<sys/ipc.h>#include<sys/msg.h>#include<string.h>struct msgbuf{int type;char ptr[0];};int main(int argc,char *argv[]){key_t key;key=ftok(argv[1],100);int msgid;msgid=msgget(key,IPC_CREAT|0600);pid_t
pid;pid=fork();if(pid==0){while(1){printf("pls input msg to send:");char buf[128];fgets(buf,128,stdin);struct msgbuf *ptr=malloc(sizeof(struct msgbuf)+strlen(buf)+1);ptr->type=1;memcpy(ptr->ptr,buf,strlen(buf)+1);msgsnd(msgid,ptr,strlen(buf)+1,0);free(ptr);}}else{struct
msgbuf{int type;char ptr[1024];};while(1){struct msgbuf mybuf;memset(&mybuf,‘\0‘,sizeof(mybuf));msgrcv(msgid,&mybuf,1024,2,0); printf("recv msg:%s\n",mybuf.ptr);}}}


//接收端

#include<stdio.h>
#include<stdlib.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<string.h>
struct msgbuf{
	int type;
	char ptr[0];
};
int main(int argc,char *argv[])
{
	key_t key;
	key=ftok(argv[1],100);

	int msgid;
	msgid=msgget(key,IPC_CREAT|0600);

	pid_t pid;
	pid=fork();
	if(pid==0)	//send
	{
		while(1)
		{
			printf("pls input msg to send:");
			char buf[128];
			fgets(buf,128,stdin);
			struct msgbuf *ptr=malloc(sizeof(struct msgbuf)+strlen(buf)+1);
			ptr->type=2;	//send msg type=2
			memcpy(ptr->ptr,buf,strlen(buf)+1);
			msgsnd(msgid,ptr,strlen(buf)+1,0);
			free(ptr);
		}
	}
	else
	{
		struct msgbuf{
			int type;
			char ptr[1024];
		};
		while(1)
		{
			struct msgbuf mybuf;
			memset(&mybuf,'\0',sizeof(mybuf));
			msgrcv(msgid,&mybuf,1024,1,0);	//recv msg type=2
			printf("recv msg:%s\n",mybuf.ptr);
		}
	}
}
时间: 2024-12-04 10:47:55

消息队列实现即时通讯的相关文章

用消息队列实现即时通讯2

一.准备阶段(需求设计)   鉴权 采用哪种权限认证模式,Cookie由于有域的限制,考虑到以后可能做桌面端,IPhone端等,所以决定采用token进行权限认证,客户端通过token保存客户验证信息.而token则采用JWT进行(补充知识:JSON Web令牌)验证,用token建议是最好不用查询数据库就能获取一些常用信息,这样就能节省一些访问时间. 补充知识: ?JSON Web Token 入门教程 阮一峰 消息 前面说过采用MQTT进行消息传输,那么怎样定义消息,怎样保存消息,以及离线消

用消息队列实现即时通讯3

消息队列(MQTT) 前面讨论过消息队列传输的具体内容,那我们该用哪种方式进行呢?通过查阅网络资料,发现有两个方式值得借鉴. 第一种方式每个帐号订阅自己的Inbox,而其他人都向这个Inbox发布信息,这种方式接收比较方便,但是发布时就比较麻烦.如群组有50人的话,一条消息就要发布50次,这和Http推拉信息有点类似. 第二种方式,也是我正在使用的方式.每个帐号只订阅自己的个人聊天信息,以及加入的群聊.主题以"/"进行分隔,个人聊天p2p/帐号,群聊group/组帐号.这种方式发送群消

消息队列简介

一.概述 计算机科学中,消息队列和邮箱是用于进程间或者线程与同一进行间通讯的软件工程组件.他们都是消息传传输控制队列. 消息队列是发布/订阅模型的变种,是较大的面向消息的中间件的一部分.多数消息系统支持发布/订阅和消息队列模型的API,如JMS(Java Message Service). 消息队列提供异步的通讯协议,这就意味着消息发送者和消息接收者不需要在同一时间与消息队列交互.消息入队直到接收者来读取.消息队列都有单条消息大小的限制,入队消息的数目也有限制. 消息队列的主要应用是在不同计算机

阿里云消息队列Kafka商业化:支持消息无缝迁移到云上

列Kafka彻底解决了开源产品稳定性不足的痛点,可用性达99.9%,数据可靠性99.999999%,并且支持消息无缝迁移到云上. 7月25日,阿里云宣布正式推出消息队列Kafka,全面融合开源生态.在兼容Apache生态的基础上,阿里云消息队列Kafka彻底解决了开源产品稳定性不足的痛点,可用性达99.9%,数据可靠性99.999999%,并且支持消息无缝迁移到云上. Kafka是一个分布式.高吞吐量.高可扩展性的消息队列服务,广泛用于日志收集.监控数据聚合.流式数据处理.在线和离线分析等大数据

MQTT是IBM开发的一个即时通讯协议,构建于TCP/IP协议上,是物联网IoT的订阅协议,借助消息推送功能,可以更好地实现远程控制

最近一直做物联网方面的开发,以下内容关于使用MQTT过程中遇到问题的记录以及需要掌握的机制原理,主要讲解理论. 背景 MQTT是IBM开发的一个即时通讯协议.MQTT构建于TCP/IP协议上,面向M2M和物联网IoT的连接协议,采用轻量级发布和订阅消息传输机制.Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用. 基本概念 [MQTT协议特点]——相比于RESTful架构的物联网系统,MQ

系统通讯之RPC VS 消息队列

文前声明:本人只是知识的搬运工,文中许多知识和观点大多数都是来自于网络或书本,因为没有记录的习惯学习研究完,便忘记名称了,如若还记得,在文后自会添加备注. 个人观点,对于这两种通讯方式我是支持消息队列的! 原由且听我分析: 通讯方式 RPC 消息队列 优点 舒适感非常好,直接远程调用,无需关注通讯协议等等细节 (除了这个,我还真不知道RPC还有什么优点) 1.解耦 2.冗余 3.可扩展 4.可恢复 5.交易缓冲 6.消息投递保证 7.异步通信(支持同步) 8.提高系统吞吐.健壮性 缺点 1.对开

linux_c 开发(5-5)进程间通讯_消息队列

进程间通讯_消息队列 定义: UNIX早起通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便.消息队列(也称报文队列)则克服了这些缺点. 发展: 消息队列就是一个消息的链表.可以把消息看做一个记录,**具有特定的格式.进程可以向中按照一定的规则添加新消息:另一些进程则可以从消息队列中读取消息. 分类: 目前主要有两种类型的消息队列:POSIX消息队列 以及系统V消息队列,系统V消息队列目前被大量使用. 持续性:系统V消息队列是随内核持续的,只有在

[Python]实现XMPP协议即时通讯发送消息功能

#-*- coding: utf-8 -*- __author__ = 'tsbc' import xmpp import time #注意帐号信息,必须加@域名格式 from_user = '[email protected]' password = 'a1b2c3d4' #可以添加多个接收人 to_user = ['[email protected]'] msg = "您好!这是条测试信息!" def to_msg(): """ 基于xmpp协议的即时

进程组间通讯(消息队列)

1.所有进程共用一个消息队列组. 2.消息队列组里面包含一个发送消息队列和一个接收消息队列. 3.请求进程主动向发送消息队列发送消息,从接收消息队列接收消息.处理进程从发送消息队列读取请求,向接收队列发送处理结果. 4.同一进程组都是相同的进程. 5.处理进程组内的所有进程以竞争的方式从消息队列内读取请求. 5.要实现的功能是向进程组发送消息,得到处理结果.从发送请求的进程的角度来说,只需要知道发送给哪个进程组即可.从接收进程的角度来说,需要知道请求是从哪一个进程发来的才能准确地把请求结果返回.