Spring MVC:实现Comed通道功能


  • 我正在开发一个Spring MVC应用程序,我想在其中实现Comed提供的聊天功能。现在,在这个项目中,有不同的组,每个组都有唯一的id(主键)。每当创建一个组时,我都想创建一个频道,然后当成员在组内发送消息时,消息为通过该通道发送,因此它只发送到groupMembers。不聊天消息的持久性是必需的,只是消息应该推送给所有在线用户。
    • 我选择cometd的主要动机是,当我读到有很多文档和帮助,但正如我所看到的,几乎没有好的net上的示例和项目网站上的文档如下被太多的技术细节掩盖了。我已经实施了一些代码,但说实话,我不知道下一步该做什么,该去哪里接下来

下面是我实现的一些代码,请看一看。

ChatService.java:

package com.journaldev.spring.chat;
import org.cometd.annotation.ServerAnnotationProcessor;
import org.cometd.bayeux.server.BayeuxServer;
import org.cometd.server.BayeuxServerImpl;
import org.springframework.beans.BeansException;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.servlet.ServletContext;
@Component
@Singleton
public class ChatService{
    private BayeuxServer bayeuxServer;
    private ServerAnnotationProcessor serverAnnotationProcessor;
    @Inject
    public void setBayeuxServer(BayeuxServer bayeuxServer){
        this.bayeuxServer = bayeuxServer;
    }
    @PostConstruct
    public void init(){
        this.serverAnnotationProcessor = new ServerAnnotationProcessor(bayeuxServer);
    }
    public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException{
        System.out.println("Configuring Service "+name);
        serverAnnotationProcessor.processDependencies(bean);
        serverAnnotationProcessor.processConfigurations(bean);
        serverAnnotationProcessor.processCallbacks(bean);
        return bean;
    }
    public Object postProcessAfterInitialization(Object bean, String name) throws BeansException {
        return bean;
    }
    public void postProcessBeforeDestruction(Object bean, String name) throws BeansException {
        serverAnnotationProcessor.deprocessCallbacks(bean);
    }
    @Bean(initMethod = "start", destroyMethod = "stop")
    public BayeuxServer bayeuxServer() {
        // bean.setOption(BayeuxServerImpl.LOG, "3");
        return new BayeuxServerImpl();
    }
    public void setServletContext(ServletContext servletContext) {
        servletContext.setAttribute(BayeuxServer.ATTRIBUTE, bayeuxServer);
    }
}

聊天制作人:

public class ChatProducer {
    private ChatService chatService;
    public void setChatService(ChatService chatService){
        this.chatService = chatService;
    }
   public synchronized void sendMessages(String messages){
          // Unfortunately I don't know where to send the messsages and how
   }
}

任何关于如何创建频道、订阅和通过它们发送消息的帮助都是很好的。如果有人想为此聊天,请发表评论,我会为此创建一个聊天室。非常感谢。:-)

如果你把你的"组"概念翻译成教程中的股票符号,那么这个用例对我来说似乎是一样的(如果不是,那么你必须详细说明你的问题)。

因此,通过查看教程的示例3.2,您将看到股票价格更新是如何发送给对该特定股票的变化感兴趣的所有订阅者的。

在您的情况下,教程示例转换为向特定组的所有成员发送消息,这正是您所要求的。

本教程包含一些代码,其中包含有关如何创建频道、初始化频道以及使用频道向订阅者发送消息的注释。

试试这个教程:构建它,运行它,研究它。一旦你掌握了它的工作原理,你就会发现你的例子很相似,而且很容易实现。

一旦您拥有了想要运行的基本功能,就可以考虑添加授权。这将允许您微调谁可以将消息发布到哪个频道。

最新更新