2014-12-02 2 views
0

Я работаю в приложении Spring-MVC, и я хотел бы включить персонализированный чат в качестве функции. После некоторых исследований я обнаружил, что Cometd является подходящим вариантом. Пройдя через документацию и навсегда повторяя образцы, у меня есть немного настроек, которые я сделал. Мне нужна помощь для интеграции персонализированной службы чата в приложении spring-mvc и включения частного чата, когда пользователь нажимает кнопку чата.Cometd with Spring-MVC для персонализированного общения

В основном, я узнал, что «/ service/chat» можно использовать для личного чата, поэтому у меня есть класс для этого, и для использования частного чата у меня должно быть сопоставление userid < -> sessionId , но я нигде не могу найти примеры, как это сделать. Я отправляю часть кода, который у меня есть, любезно сообщите мне, что осталось делать, и, если возможно, некоторые ресурсы, образцы для этого. Код

Контроллер:

@Controller 
@Singleton 
public class MessageController { 

    private MessageService messageService; 

    @Autowired(required = true) 
    @Qualifier(value ="messageService") 
    public void setMessageService(MessageService messageService){this.messageService=messageService;} 

    @RequestMapping(value = "/startchatting", produces = "application/text") 
    @ResponseBody 
    public String startChattingService(){ 
    return "OK"; 
    } 

    @RequestMapping(value = "/stopchatting",produces = "application/text") 
    @ResponseBody 
    public String stopChatting(){ 
     return "OK"; 
    } 

} 

Частная служба сообщений:

@Service 
public class PrivateMessageService { 

    @Session 
    private ServerSession session; 

    @Listener("/service/private") 
    public void handlePrivateMessage(ServerSession sender, ServerMessage message){ 

     String userId = (String) message.get("targetUserId"); 


     //Mapping code necessary to map userids to session-id's. 
     //ServerSession recipient = findServerSessionFromUserId(userId); 
     //recipient.deliver(session,message.getChannel(),message.getData(),null); 

    } 
} 

CometConfigurer:

@Component 
@Singleton 
public class CometConfigurer { 
    private BayeuxServer bayeuxServer; 
    private ServerAnnotationProcessor processor; 

    @Inject 
    public void setBayeuxServer(BayeuxServer bayeuxServer){this.bayeuxServer = bayeuxServer;} 

    @PostConstruct 
    public void init() {this.processor= new ServerAnnotationProcessor(bayeuxServer);} 

    public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException { 
     System.out.println("Configuring service " + name); 
     processor.processDependencies(bean); 
     processor.processConfigurations(bean); 
     processor.processCallbacks(bean); 
     return bean; 
    } 

    public Object postProcessAfterInitialization(Object bean, String name) throws BeansException { 
     return bean; 
    } 

    public void postProcessBeforeDestruction(Object bean, String name) throws BeansException { 
     processor.deprocessCallbacks(bean); 
    } 

    @Bean(initMethod = "start", destroyMethod = "stop") 
    public BayeuxServer bayeuxServer() { 
     BayeuxServerImpl bean = new BayeuxServerImpl(); 
     // bean.setOption(BayeuxServerImpl.LOG_LEVEL, "3"); 
     return bean; 
    } 

    public void setServletContext(ServletContext servletContext) { 
     servletContext.setAttribute(BayeuxServer.ATTRIBUTE, bayeuxServer); 
    } 
} 

Cometd бобы:

<beans:bean id="bayeuxServer" class="org.cometd.server.BayeuxServerImpl" init-method="start" destroy-method="stop"/> 

Я непосредственно включил файлы JSP, которые имеют конфигурацию и настройку cometd от https://github.com/fredang/cometd-spring-example, и изменили их для удовлетворения моих потребностей. Пожалуйста, дайте мне знать, что еще остается, все предложения приветствуются, я не могу найти примеры для той же задачи в сети, которые детализированы, и иметь больше кода, чем объяснение. Спасибо.

ответ

1

Использование новой функции WebSocket Spring 4.x определенно будет работать; Более того, этот новый модуль поставляется с большим количеством очень интересных возможностей для вашего случая использования:

  • поддержка протокола ТОПАЙТЕ
  • абстракций сообщений
  • управления сеансом
  • паб/суб механизмы
  • и т.д.

Вы можете проверить this nice chat application that demonstrates all those features.

+0

Я попробую ... Я использовал пример spring-mvc-chat и внедрил его. Я хотел бы включить поддержку websocket для этого, я разместил вопрос, вы можете проверить эту ссылку: http : //stackoverflow.com/questions/27289429/modifications-for-using-deferredresult-in-spring-mvc –

+0

Привет, я ищу что-то подобное, но самое последнее, есть ли какие-нибудь рекомендации? – Fabricelepro