2016-06-12 11 views
0

サーバーからクライアントにstompを使用してメッセージを送信しようとしています。クライアント側でsock.jsとstompを使用すると、コントローラメソッドで@SendToアノテーションを使用するだけで、サーバー側で多くの操作を行うことなく、あるユーザーから別のユーザーにメッセージを送信できます。しかし、ユーザーが受け取るメッセージはサーバー上で生成されます(実際はオブジェクト全体を送信していますが、簡単にするためにStringを送信しようとしています)。具体的には、これはフレンドリクエスト受諾を扱い、あるユーザがフレンドリクエストを受け入れると、そのリクエストを送ったユーザは、リクエストが受け入れられたというメッセージを受け取るべきです。したがって、要求を受け入れるための残りのコントローラメソッドへの単純なAjax呼び出しの後、メソッドは他のユーザーにもメッセージを送信する必要があります。ここでは、コードです:Spring stomp - SimpMessagingTemplateを使用してサーバーからメッセージを送信する

@RestController 
@RequestMapping("/rest/user") 
public class UserController{ 
    @Autowired 
    SimpMessagingTemplate simp; 

    @RequestMapping(value="/acceptFriendRequest/{id}", method=RequestMethod.GET, produces = "application/json") 
    public boolean acceptFriendRequest(@PathVariable("id") int id){ 
     UserDTO user = getUser(); // gets logged in user 
     if (user == null) 
      return false; 
     ... // Accept friend request, write in database, etc. 
     String username = ... // gets the username from a service, works fine 
     simp.convertAndSendToUser(username, "/project_sjs/notify/acceptNotification", "Some processed text!"); 
     return true; 
    } 
} 

そして、ここでウェブソケット構成です:

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/sendNotification").withSockJS(); 

    } 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 

     config.enableSimpleBroker("/notify"); 
     config.setApplicationDestinationPrefixes("/project_sjs"); 
    } 


} 

そしてこれはjavascript関数である:ユーザーが友達リクエストを受け付け

function setupWebsockets(){ 
    var socketClient = new SockJS("/project_sjs/sendNotification"); 
    stompClient = Stomp.over(socketClient); 
    stompClient.connect({}, function(frame){ 
     stompClient.subscribe("/project_sjs/notify/acceptNotification", function(retVal){ 
      console.log(retVal); 
     }); 
    }); 
} 

、すべてが書かれていますデータベースで正常に動作します。私はページをリフレッシュすると、他のユーザーが私の友人であることがわかります。しかし、他のユーザは、自分の要求が受け入れられたというメッセージを受け取ることはありません。 私が間違っていることはありますか?どんな助けでも大歓迎です。ありがとう!

+0

答えが得られましたか? –

+0

私はこの問題を別の方法で解決しました。 "/ project_sjs/notify/acceptNotification"という同じエンドポイントにすべてのユーザーをサブスクライブするのではなく、ユーザー名で区別するのではなく、 "/ project_sjs/notify/acceptNotification/John123"のように各ユーザーを別のエンドポイントにサブスクライブしました。このように、ユーザ名がJohn123のユーザ(ユーザ名が一意であるため、1人だけです)が通知を受け取ります。そしてそれは十分にうまくいった。 –

答えて

1

私はこの問題を別の方法で解決しました。 "/ project_sjs/notify/acceptNotification"という同じエンドポイントにすべてのユーザーをサブスクライブするのではなく、ユーザー名で区別するのではなく、 "/ project_sjs/notify/acceptNotification/John123"のように各ユーザーを別のエンドポイントにサブスクライブしました。このように、ユーザ名がJohn123のユーザ(ユーザ名が一意であるため、1人だけです)が通知を受け取ります。そしてそれは十分にうまくいった。

+0

あなたはこのプロジェクトへのリンクを持っていますか?乾杯 –

関連する問題