WebSockets-与-的结合-RabbitMQ-实时协作的秘诀 (websocket和http区别)
引言
实时协作是现代软件开发中非常重要的一个方面。为了实现实时协作,一种常见的做法是将消息队列与WebSocket技术相结合。RabbitMQ 简介
RabbitMQ是一个功能强大的消息队列系统,它能够有效地处理高并发的消息传递。RabbitMQ具有以下特点:- 可靠性:使用持久化存储来确保在消息传递过程中不会丢失任何消息。
- 可扩展性:支持集群部署,可以增加节点来提高系统吞吐量和可靠性。
- 高效性:使用基于共享内存的消息传递机制,可以实现高并发的消息处理。
- 灵活性:支持各种消息模式,如点对点、发布/订阅、请求/响应等。
WebSocket 简介
WebSocket是一种通信协议,它可以在客户端和服务器之间建立持久连接,实现双向通信。WebSocket具有以下特点:- 实时性:能够在客户端和服务器之间实时地传递消息,避免了传统HTTP协议的请求/响应模式带来的延迟。
- 高效性:采用二进制数据传输,相比于文本格式的HTTP请求,可以减少数据传输量。
- 跨域支持:支持跨域通信,允许不同域名下的客户端和服务器进行通信。
将 RabbitMQ 与 WebSocket 结合
将 RabbitMQ 与 WebSocket 结合起来可以实现高效的实时协作。具体步骤如下:- 消息队列设置:创建一个 RabbitMQ 的消息队列,并设置相应的交换机和队列。
- 消息发送:当有新的消息需要发送时,将其发送到之前创建的消息队列中。
- 消息订阅:客户端通过 WebSocket 建立和服务器的连接,并订阅之前创建的消息队列。
- 消息处理:客户端收到新的消息后,根据业务需求进行相应的处理。
- 双向通信:WebSocket允许客户端和服务器之间进行双向通信,客户端可以通过 WebSocket 发送消息给服务器,服务器也可以实时推送消息给客户端。
应用场景
将 RabbitMQ 与 WebSocket 结合起来的实时协作机制在许多场景中都有应用价值,如:- 聊天应用
- 实时监控系统
- 多人协作编辑
- 在线游戏
优势
这种组合提供了可靠、实时的消息传递机制,具有以下优势:- 高并发处理能力
- 实时消息传递
- 双向通信
- 可扩展性
- 跨域支持
总结
本文介绍了如何将 RabbitMQ 与 WebSocket 结合起来实现高效的实时协作。这种组合凭借其可靠性、实时性、双向通信和可扩展性,在各种实时协作场景中具有重要的应用价值。如何在windows下突破Rabbitmq的socket限制
利用Rabbitmq进行各类业务系统(如SAP、OA、EHR、KMS、访客系统、AD等)的集成和接口,已有很长一段时间了,初步建立了企业服务总线(ESB)。随着新业务系统的不断接入到ESB中,在实践中也发现了一些问题并总结了一些经验,下文主要介绍如何在windows下突破Rabbitmq的socket限制数,以便为需要使用的同学分享一些实际经验,后续将陆续分享一些技术经验。
1、 RabbitMQ_Limits文档说明
Status of node rabbit@MYSERVER ...
[{pid,6604},
{running_applications,
[{rabbitmq_management,RabbitMQ Management Console,2.8.2},
{xmerl,XML parser,1.3},
{rabbitmq_management_agent,RabbitMQ Management Agent,2.8.2},
{amqp_client,RabbitMQ AMQP Client,2.8.2},
{rabbit,RabbitMQ,2.8.2},
{os_mon,CPO CXC 138 46,2.2.8},
{sasl,SASL CXC 138 11,2.2},
{rabbitmq_mochiweb,RabbitMQ Mochiweb Embedding,2.8.2},
{webmachine,webmachine,1.7.0-rmq2.8.2-hg},
{mochiweb,MochiMedia Web Server,1.3-rmq2.8.2-git},
{inets,INETS CXC 138 49,5.8},
{mnesia,MNESIA CXC 138 12,4.6},
{stdlib,ERTS CXC 138 10,1.18},
{kernel,ERTS CXC 138 10,2.15}]},
{os,{win32,nt}},
{erlang_version,Erlang R15B (erts-5.9) [smp:4:4] [async-threads:30]/n},
[{total,},
{processes,},
{processes_used,},
{system,},
{atom_used,},
{binary,},
{vm_memory_high_watermark,0.},
{vm_memory_limit,},
{disk_free_limit,},
{disk_free,},
{file_descriptors,
[{total_limit,924},
{total_used,24},
{sockets_limit,829}, 默认的限制sockets数为829
{sockets_used,22}]},
{processes,[{limit,},{used,388}]},
{run_queue,0},
{uptime,}]
1、 如何在windows下扩展sockets数量,提高吞吐量?
(1)、需要在windows系统环境变量中设置erlang的ERL_MAX_PORTS
(2)重启RabbitMQ服务才能正式生效
(3)扩展后的最终效果如下:
如何在windows下突破Rabbitmq的socket限制
1、 RabbitMQ_Limits文档说明Status of node rabbit@MYSERVER ...[{pid,6604},{running_applications,[{rabbitmq_management,RabbitMQ Management Console,2.8.2},{xmerl,XML parser,1.3},{rabbitmq_management_agent,RabbitMQ Management Agent,2.8.2},{amqp_client,RabbitMQ AMQP Client,2.8.2},{rabbit,RabbitMQ,2.8.2},{os_mon,CPO CXC 138 46,2.2.8},{sasl,SASL CXC 138 11,2.2},{rabbitmq_mochiweb,RabbitMQ Mochiweb Embedding,2.8.2},{webmachine,webmachine,1.7.0-rmq2.8.2-hg},{mochiweb,MochiMedia Web Server,1.3-rmq2.8.2-git},{inets,INETS CXC 138 49,5.8},{mnesia,MNESIA CXC 138 12,4.6},{stdlib,ERTS CXC 138 10,1.18},{kernel,ERTS CXC 138 10,2.15}]},{os,{win32,nt}},{erlang_version,Erlang R15B (erts-5.9) [smp:4:4] [async-threads:30]\n},{memory,[{total,},{processes,},{processes_used,},{system,},{atom,},{atom_used,},{binary,},{code,},{ets,}]},{vm_memory_high_watermark,0.},{vm_memory_limit,},{disk_free_limit,},{disk_free,},{file_descriptors,[{total_limit,924},{total_used,24},{sockets_limit,829}, 默认的限制sockets数为829{sockets_used,22}]},{processes,[{limit,},{used,388}]},{run_queue,0},{uptime,}](1)、需要在windows系统环境变量中设置erlang的ERL_MAX_PORTS(2)、重启RabbitMQ服务才能正式生效
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。