我已经成为STOMP和0MQ的新手,但总的来说,我想通过PHP MOM或许多PHP MOM的交互来促进浏览器中客户端到客户端的通信。我正在考虑使用WebSocket在html5浏览器客户端和MOM端点之间提供持久的双工连接(如果可用),然后使用这些端点来促进任意数量的浏览器客户端之间的通信,这可能与1-1、1-相关许多很多-1关系。
MOM端点可能出于其他目的与其他服务器进行通信,或者在它们之间进行通信,我相信0MQ可能是在这些服务器之间快速交换信息的可行方法。作为客户端之间消息传递的协议,STOMP看起来不错(尽管我知道协议定义存在一些问题)...。
....这就是我的困惑点。要使用STOMP,MOM必须是STOMP代理,如果它是STOMP代理,那么由于0MQ是“无经纪人”的消息传递层,我是否会击败使用两者的目的?
为了澄清起见,我正在考虑将0MQ用于MOM-MOM通信,将STOMP用于客户端-客户端通信。
当然,除非有某种方法,否则我可以重新分配0MQ的用途以促进客户与客户之间的通信吗?我想我真正的困惑是0MQ-它是轻量级消息传递层,而不是协议,还是两者兼而有之?如果仅是一层,我不能使用0MQ传输STOMP消息吗?
如果有人能为我提供0MQ的帮助,我将非常感谢-谢谢!
最佳答案
0MQ提供了一种无服务器的类似于套接字的API,您可以在其上覆盖自己的协议。 0MQ传输原始的未解释的二进制数据(尽管某些语言绑定增加了对特定序列化(如python pickling或JSON)的支持)。
与普通套接字不同,0MQ套接字可以是多对一,一对多的。
0MQ还具有消息传递模式的概念-例如,您可以定义REQ / REP套接字,从而强制执行每个请求都必须跟随响应的约束-不允许您连续发送两个请求。还有其他各种模式可以适应不同的情况。
请参见0MQ Guide和API
因此,回答您的一些问题-0MQ本质上是一个消息传递层,原则上,您应该能够像普通网络套接字一样通过0MQ套接字发送STOMP。但是,我不确定Web客户端可以直接使用0MQ-它需要语言绑定,并且ZMQ本机库是否可用。我认为这可以排除Web客户端的使用。