精华内容
下载资源
问答
  • STOMP

    2019-09-30 10:31:25
    STOMP: 说明:STOMP is a simple text-orientated messaging protocol. 面向文本消息协议 spring 之stomp https://www.cnblogs.com/jmcui/p/8999998.html stomp-websocket ...

    STOMP:

    说明:STOMP is a simple text-orientated messaging protocol.

    面向文本消息协议

    spring 之stomp

    https://www.cnblogs.com/jmcui/p/8999998.html

     

    stomp-websocket

    http://jmesnil.net/stomp-websocket/doc/

    转载于:https://www.cnblogs.com/jony-it/p/10677537.html

    展开全文
  • stomp

    2020-06-22 16:46:41
    Springboot 使用 stomp 引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> &l...

    Springboot 使用 stomp

    1. 引入依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-messaging</artifactId>
    </dependency>
    1. 启动配置

    @EnableWebSocketMessageBroker

    1. Stomp配置

      @Configuration
      public class StompConfig implements WebSocketMessageBrokerConfigurer {
      
          @Autowired
          private StompHandShakeInterceptor handShakeInterceptor;
      
          @Override
          public void registerStompEndpoints(StompEndpointRegistry registry) {
              registry.addEndpoint("/stomp")
                      // 添加允许跨域访问
                      .setAllowedOrigins("*")
                      //添加socket拦截器,用于从请求中获取客户端标识参数
                      .addInterceptors(handShakeInterceptor)
                      .withSockJS();
          }
      
          @Override
          public void configureMessageBroker(MessageBrokerRegistry config) {
              config.enableSimpleBroker("/topic");
              config.setUserDestinationPrefix("/user");
              config.setApplicationDestinationPrefixes("/app");
          }
      
      }
    2. 消息监听与发送

      @Slf4j
      @RestController
      public class StompMessgaeHanlder {
          @Autowired
          private SimpMessagingTemplate messagingTemplate;
          @MessageMapping("/message")
          @SendTo("/topic/sub")
          public String hanlder(@Payload String data) {
              log.info("data = {}", data);
              return "hello"+data;
          }
      
          @Scheduled(fixedDelay = 1000)
          public void hanlder() {
              messagingTemplate.send("/topic/sub", new GenericMessage("hello".getBytes()) {
              });
          }
      }
      
    展开全文
  • Stomp

    2014-06-27 23:07:00
    现在我们就来实践一下Stomp协议,你需要的是: 1.一个支持stomp消息协议的messaging server(譬如activemq,rabbitmq); 2.一个终端(譬如linux shell); 3.一些基本命令与操作(譬如nc,telnet) ...


    Stomp是一个简单的消息文本协议,它的设计核心理念就是简单与可用性,官方文档:http://stomp.github.io/

    现在我们就来实践一下Stomp协议,你需要的是:

    1.一个支持stomp消息协议的messaging server(譬如activemq,rabbitmq);
    2.一个终端(譬如linux shell);
    3.一些基本命令与操作(譬如nc,telnet)

    1.建立连接
    当我们(Client端)向服务器发送一个CONNECT Frame,就向服务器发起了一个连接请求,此时服务器端返回一个CONNECTED Frame表示建立连接成功,其中头字段version表示采用的stomp协议版本(这里默认是1.0)


    ps: ^@符号 ctrl+@键(用来提交请求),删除之前输入的数据 ctrl+n+backspace键

    当然Client端也可指定所支持的协议版本(accept-version字段,多个版本按递增顺序排列,并用逗号分隔);



    服务器此时返回的CONNECTED Frame中会列出它所支持的协议版本号中最高的那个(如上图的version:1.1)

    如果服务器端不支持客户端所列举的协议版本(比如这里的2.1),那么服务器会返回一个ERROR Frame并且列举出服务器自己所支持的协议版本(如下图的version:1.0,1.1)




    2.消息传递
    客户端一旦与服务器端建立连接,那么就可发送下列Frame进行消息传递

    SEND
    SUBSCRIBE
    UNSUBSCRIBE
    ACK
    NACK
    BEGIN
    COMMIT
    ABORT
    DISCONNECT


    SEND Frame 用来将客户端消息发送到目的地(destination),因此它必须指定一个destination头字段,另外在所有头字段之后,新起一个空行,之后就是需要发送的消息(譬如这里的 hello stomp!)



    此时"hello stomp!" 这条消息就被发送到了队列 my_queue中去

    现在我们再起一个客户端clinet_a,来接受这个队列(myqueue)中的消息



    SUBSCRIBE Frame 表示客户端希望订阅某一个目的地(destination)的消息(这里是/queue/my_queue),其中头字段id表示在一个会话连接里,唯一 标示一个订阅者(subscription),头字段destination标示该订阅者(subscription)需要订阅的目的地(这里是一个队 列,/queue/my_queue)

    紧接着,我们就接受到服务器端发送来的消息(MESSAGE Frame),其中message_id:唯一标示了这条消息(后面我们会使用这个消息id进行ack,uack操作),content-length: 标示消息体的长度,在所有这些头后面,新起一个空行就是消息内容(如这里的hello stomp!)

    如此时我们希望订阅另一个destination,该如何办呢?,是不是再发送一个SUBSCRIBE Frame就好了?



    结果发现服务器端返回了ERROR Frame 告诉我们SUBSCRIBE失败,原来同一个subscription id只能订阅一个destination,要想订阅令一个destination,必须先发送UNSUBSCRIBE Frame,然后再SUBSCRIBE 到新的目的地



    UNSCUBSCRIBE Frame中的id标示需要取消订阅的subscription,然后我们在订阅到新的destination(这里是/queue/other_queue),可以发现订阅成功,服务器没有再发送ERROR Frame

    至此,我们就模拟出了一个PTP(point-to-point)消息模型,下面我们也模拟下另外一个pub/sub消息模型:

    准备工作,新起两个连接订阅到/topic/my_topic上,如下图:
    clinet_a


    client b


    Send端发送广播消息:


    我们去检查下两个消息接收客户端,果然发现收到了这条广播消息^_^
    client a


    client b


    默认情况下,只要服务器端发送消息,就认为客户端接收成功(即ack模式为auto),若我们需要更严格的消息保证,则必须采用client模式,即由客户端确认消息的接受

    服务器发送了一个消息到/queue/ackqueue



    此时我们的客户端client_a确实接受到了该消息



    虽然该消息已经发送到客户端,但是由于该消息没有确认(ack),则该消息还保存在队列/queue/ackqueue中(直到客户端确认才删除),我们可以通过rabbitmq提供的命令来查看(sudo rabbitmqctl list_queues name messages_ready messages_unacknowledged):



    若客户端在确认消息前与客户端断开连接,那么服务器可能(根据不同server的设计而不同)会选择将该消息发送给另一个subscription(这里是client_b)



    可以看出rabbit是选择将它发送给另一个subscription, 我们在使用命令查ack_queue队列中是否还有未确认的消息



    结果发现没有了 ^_^

    若是客户端希望确认一个消息,该如何做呢?,只要发送一个ACK Frame即可!
    在ACK Frame中,subscription标示是谁确认消息,message-id标示是确认哪条消息(即MESSAGE Frame中携带的message-id)



    另外我在rabbitmq的测试结果发现,ack具有累积效应,譬如接收了10条消息,如果你ack了第8条消息,那么1-7条消息都会被ack,只有9-10两条消息还保持未ack状态

    除了有ACK Frame,还有NACK Frame,它表示客户端未成功接收某条消息,这时候服务器可以选择重发或者丢弃(对于rabbitmq,我的测试结果是选择重发)


    3.断开连接
    说完了连接的建立,消息的发送与接收,现在我们来看看客户端如何与服务器断开连接的,更重要的是如何安全的断开连接



    通过发送DISCONNNECT Frame表示向服务器发送一个断开连接请求,其中receipt表示服务器收到请求后请告知客户端,并返回一个相同的receipt-id

    转载于:https://www.cnblogs.com/xuelu/p/3812817.html

    展开全文
  • Stomp客户端stomp.js.zip

    2019-07-16 03:24:58
    stomp.js 是使用 HTML5 Web Socket API 实现的 Stomp 客户端。 标签:stomp
  • script src =" node_modules/ng-stomp/dist/ng-stomp.standalone.min.js " > </ script > 或分别添加SockJS + STOMP +(最小化)Stompie: < script src =" node_modules/sockjs/sockjs.min.js " >...
  • stomp安装包

    2017-08-16 13:46:46
    stomp x64 win32 python2 python3 支持32和64位系统,支持python2.7/3.6环境,直接在命令平台输入python stomp.exe install 安装
  • 该库通过WebSocket客户端为Web浏览器和node.js应用程序提供了面向RxJS的STOMP。 介绍 这是的包装。 它将STOMP操作公开为RxJS Observables。 它提供了基本库提供的几乎所有操作。 这是使用TypeScript开发的,并且在...
  • Stomp heartbeat

    2020-12-08 18:06:48
    <div><p>Hi <p>Sometimes activeMQ close ...Connection instance <strong>private</strong> https://github.com/php-enqueue/stomp/blob/master/StompContext.php#L189 and there are now heartbeat config ...
  • STOMP协议

    2020-04-29 17:39:10
    STOMP协议简介

        STOMP是一种简单的(或流式)面向文本的消息传递协议(Simple (or Streaming) Text Orientated Messaging Protocol.
        STOMP是一个简单的可互操作协议,设计用于通过中介服务器在客户端之间异步传递消息。它为客户机和服务器之间传递的消息定义了基于文本的格式。
        STOMP是一种基于帧的协议,它假设下面有一个可靠的双向流网络协议(如TCP)。客户端和服务器将使用通过流发送的STOMP帧进行通信。协议结构如下:

    COMMAND
    header1:value1
    header2:value2
    
    Body^@
    

        协议以以换行符结尾的命令字符开始。命令后面是一个或多个:格式的头信息。每个报头信息都以换行符结尾。空行表示标题的结尾和正文的开头。然后,正文后面跟着空字节(0x00)。本文档中的示例将使用ASCII中的^@,control-@来表示空字节。空字节后面可以有多个换行符。有关如何解析STOMP帧的更多详细信息。所有命令和头信息都区分大小写。
         命令和头用UTF-8编码。

    CONNECT命令

    客户端请求示例:

    CONNECT
    accept-version:1.0,1.1,2.0
    host:stomp.github.org
    
    ^@
    

    服务端回复示例:

    CONNECTED
    version:1.1
    
    ^@
    

    服务端发生错误时回复示例:

    ERROR
    version:1.2,2.1
    content-type:text/plain
    
    Supported protocol versions are 1.2 2.1^@
    

    客户端

    SEND命令

    报头必须包含destination,它指定消息的发送位置。

    SEND
    destination:/queue/a
    content-type:text/plain
    
    hello queue a
    ^@
    

        如果消息体有内容,报头需要包含content-length和 content-type。可以在头部添加任意自定义报头。如果服务器无法成功处理消息,则服务器必须向客户端发送ERROR命令信息。

    SUBSCRIBE命令

    订阅用于注册监听给定的目标。如下:

    SUBSCRIBE
    id:0
    destination:/queue/foo
    ack:client
    
    ^@
    

        如果服务器无法成功创建订阅,则服务器必须向客户端发送错误信息并断开客户端连接。
        消息中必须包含一个id头,以便在STOMP连接会话中唯一标识订阅。
        ack头的有效值是auto、client或client-individual。如果未设置标题,则默认为“auto”。当ack为auto时,客户端不需要为接收到的消息发送服务器ack消息。服务器在将消息发送给客户机时将假定客户机已收到该消息。此确认模式可导致发送到客户端丢失消息。当ack为client时,客户端向服务器发送ack消息。如果在客户端发送ACK消息之前连接失败,服务器将假定消息未被处理,并可能将消息重新传递给另一个客户端。客户端发送的ACK消息将被视为累积回复。当ack为client-individual时,ack的操作与client-ack相同,只是客户端发送的ack或NACK消息不是累积的。这意味着后面消息的ACK或NACK不能导致前面的消息得到确认。

    UNSUBSCRIBE命令

    取消订阅框架用于删除现有订阅。一旦删除订阅,STOMP连接将不再从该目标接收消息。它要求id头与前一个SUBSCRIBE操作的id值必须相同。如下:

    UNSUBSCRIBE
    id:0
    
    ^@
    

    ACK命令

    ACK用于使用客户机或客户机个人确认来确认来自订阅的消息的使用。在通过ACK或NACK确认消息之前,从该订阅接收的任何消息都不会被视为已被消费。

    ACK有两个必需的消息头:message-id和subscription,它必与MESSAGE的message-id和subscription相同。可以指定transaction头。

    ACK
    subscription:0
    message-id:007
    transaction:tx1
    
    ^@
    

    NACK命令

    NACK与ACK相反。它用于告诉服务器客户端没有使用消息。然后,服务器可以将消息发送到另一个客户端,丢弃它,或者将其放入死信队列。

    NACK采用与ACK相同的头

    BEGIN命令

    开始事务使用

    BEGIN
    transaction:tx1
    
    ^@
    

    COMMIT命令

    事务提交

    COMMIT
    transaction:tx1
    
    ^@
    

    ABORT命令

    事务回滚

    ABORT
    transaction:tx1
    
    ^@
    

    DISCONNECT命令

    1、发送断开连接命令:

    DISCONNECT
    receipt:77
    ^@
    

    2、回复断开连接命令

    RECEIPT
    receipt-id:77
    ^@
    

    3、断开连接

    服务端

    MESSAGE命令

    发送消息,如下:

    MESSAGE
    subscription:0
    message-id:007
    destination:/queue/a
    content-type:text/plain
    
    hello queue a^@
    

    如果存在正文,则消息头应该包括content-length和content-type。

    RECEIPT命令

    一旦服务器成功处理了请求接收的客户端消息,则会将receipt-id发送给客户端。

    RECEIPT
    receipt-id:message-12345
    
    ^@
    

    消息体为空

    ERROR命令

    如果出现错误,服务器可能会发送错误消息。

    ERROR
    receipt-id:message-12345
    content-type:text/plain
    content-length:171
    message: malformed frame received
    
    The message:
    -----
    MESSAGE
    destined:/queue/a
    receipt:message-12345
    
    
    Hello queue a!
    -----
    Did not contain a destination header, which is REQUIRED
    for message propagation.
    ^@
    
    展开全文
  • stomp proxy

    2020-12-26 04:05:14
    <div><p>Is there any application like httpd or nginx which could proxy stomp protocol?</p><p>该提问来源于开源项目:rstoyanchev/spring-websocket-portfolio</p></div>
  • STOMP planner

    2021-01-01 02:48:25
    <div><p>This is the initial commit of the STOMP planner code. This PR only captures the current state of the <a href="https://github.com/ros-industrial/industrial_moveit">public repo</a> and does not ...
  • stomp-websocket-server 使用Spring使用STOMP实现Websocket服务器
  • stomp协议脚本

    2018-02-01 21:30:17
    STOMP协议有客户端脚本,STOMP协议有客户端脚本。。。。
  • <div><p>|<strong>Q|<strong>A| ...<p>I use <code>https://github.com/stomp-php/stomp-php</code> to implement the Message publisher/provider</p><p>该提问来源于开源项目:swarrot/swarrot</p></div>
  • stomp与rabbitmq stomp插件

    千次阅读 2016-10-15 14:07:04
    spring官方websocket框架提供stomp协议实现,从stomp协议本身来说,对要实现web长连接服务非常方便,但是“理想”很丰满,stomp协议到stomp插件实现提供方的映射简直是……我说的客气一点,简直是一坨屎 stomp仿照...
  • STOMP协议详解

    万次阅读 2019-02-09 11:42:06
    STOMP协议详解
  • activemq-nms-stomp:Apache ActiveMQ NMS.Stomp客户端的镜像

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,498
精华内容 1,399
关键字:

stomp