Articles of 消息队列

使用nginx + pushstream模块进行长轮询可能会丢失消息吗?

我阅读了所有可以find的文档,论坛和示例,但无法find关于pushstream模块在以下情况下的行为的描述: 我正在使用nginx + pushstream在会话队列中为要求在服务器端花费一点时间的操作的用户传递状态消息。 使用长轮询技术,客户端在每次传递消息或达到连接超时时重新连接。 如果同时发送到订阅队列的消息很多,那么在重新连接时,客户端是否可能会错过一条消息? 或者这种情况是由pushstream模块处理的吗? 感谢大家花时间阅读和回答! 🙂

无法在读取模式下打开消息队列(mq_open())

我有一个程序创build一个消息队列,并发送一个消息(与mq_send() )到这个队列。 然后我尝试打开相同的消息队列来读取另一个进程的消息。 但是mq_open()返回-1。 open_and_write_MQ.c #include <stdio.h> #include <mqueue.h> #include <stdlib.h> #include <string.h> #define LEN 50 int main(int argc, char * argv[]) { struct mq_attr attr; mqd_t fd; char buff[LEN]; attr.mq_flags = 0; attr.mq_maxmsg = 10; attr.mq_msgsize = LEN; attr.mq_curmsgs = 0; memset(buff,0,LEN); strcpy(buff,"This is just a test message"); if(argc < 2) { printf("\nPlease enter […]

POSIX消息队列位于哪里(Linux)?

man 7 mq_overview表示可以使用通常用于文件的命令(例如ls(1)和rm(1))查看和操纵系统上的POSIX“…消息队列”。 例如,我可以使用mqd_t作为文件描述符来读取,如下所示: #include <iostream> #include <fcntl.h> #include <mqueue.h> #include <unistd.h> #include <stdlib.h> int main(int argc, char **argv) { if (argc != 2) { std::cout << "Usage: mqgetinfo </mq_name>\n"; exit(1); } mqd_t mqd = mq_open(argv[1], O_RDONLY); struct mq_attr attr; mq_getattr(mqd, &attr); std::cout << argv[1] << " attributes:" << "\nflag: " << attr.mq_flags << "\nMax […]

简单的IPC通过Linux消息

我试图写一些使用Linux消息的客户端 – 服务器应用程序的例子。 这是我的代码: #include <mqueue.h> #include <ctype.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <sys/stat.h> #include <sys/types.h> #define MSG_SIZE 4096 #define MSG_MAX_COUNT 1024 #define MSG_TYPE_TO_UPPER 0 #define MSG_TYPE_EXIT 1 #define MQ_NAME "msg_queue" namespace { int str_toupper(char *str) { int len = 0; for(; str[len]; ++len) { str[len] = toupper(str[len]); } return len; […]

在C中使用单个消息队列是双向通信

我希望服务器发送一些消息给客户端和客户端来确认它。 我被赋予了这个任务。 我可以在C linux中使用单个消息队列吗?或者我需要创build两个? 谢谢 :)

c。multithreading服务器的devise

当试图在linux上实现一个简单的echo服务器并发支持。 使用以下方法: 使用pthread函数来创build一个线程池,并维护在一个链表中。 它在进程启动时创build,并在进程终止时销毁。 主线程将接受请求,并使用POSIX message queue来存储接受的套接字文件描述符。 在循环中的线程从消息队列中读取,并处理它获取的请求,当没有请求时,它将被阻塞。 该程序现在似乎工作。 问题是: 在中间使用message queue是否合适,是否足够高效? 完成需要处理来自多个客户端的并发请求的线程工具的一般方法是什么? 如果不正确的使循环池中的线程从消息队列中检索msg,那么如何将请求传递给线程呢?

mq_open err否13权限被拒绝

我正在尝试使用mq_open()调用创buildposix mq时遇到权限问题。 我没有纳入这里提到的变化mq_open权限被拒绝我看了其他相关的post,像这个https://groups.google.com/forum/#!topic/comp.unix.programmer/hnTZf6aPpbE但也指向相同的事情。 也试图编译时,我遇到了错误的地方没有确定和调用mq调用,它显示编译通过添加-lrt在海湾合作委员会,后能够编译,提及它,因为我不完全知道它的基本原理,没有了解它通过阅读post:) gcc server_mq.c -lrt -o服务器 错误号是13 哦,亲爱的,mqd出了问题! 没有权限 #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <mqueue.h> #include <errno.h> #include <string.h> #include "client_server.h" #define PATH "/tmp/servermq" int main(void) { mqd_t mqd; mode_t omask; omask = umask(0); int flags = O_RDWR | O_CREAT | O_EXCL; struct mq_attr attr, *attrp; attr.mq_maxmsg = 5; attr.mq_msgsize = […]

mq_notify只启动一个线程

我正在尝试使用mq_notify调用来启动一个POSIX消息队列的线程。 一切似乎正确,但我只得到一个线程,它处理所有的消息,但它永远不会终止。 我以为我会得到新的线程处理,这似乎不正确。

将包类对象指针装入char *作为消息队列

是否可以通过POSIX消息队列正确安全地传递类对象指针? 例如, Object *obj = new Object(); mq_send(mqdes, static_cast<char*>&obj, sizeof(obj), 1); 并在接收端,执行reinterpret_cast回到我的Object ? 由于消息队列在Linux上使用文件描述符,所以我很好奇它是如何工作的。 我已经尝试失败,但认为我可能做错了什么。

为可以有多个实例的应用程序创build消息队列的唯一键

我制作了一个Linux CUI应用程序,通过Message-Quene在进程之间进行通信。 只要它是一个实例,它就没有问题。 但是,当同一个应用程序有多个实例时,该排队中的消息将被发送到错误的实例。 我知道这可以通过给msgget函数一个唯一的键来避免。 使用ftok()来创build一个键,但由于variables是相同的,它们会导致相同的键。 有人可以指导我如何拥有一个独特的关键每个实例? 我现在唯一的想法是将给予ftok的variables进行随机化,而且我知道不能这样做。