【发布时间】:2015-04-07 12:52:50
【问题描述】:
- 我正在开发一个 Spring-MVC 应用程序,我想在其中
实现 Cometd 提供的聊天功能。现在,在这个
项目中,有各种组,每个组都有唯一 ID(主键)。
每当创建一个组时,我想创建一个频道,然后
当成员在组内发送消息时,该消息是
通过该通道发送,因此仅发送到 groupMembers。不
聊天消息的持久性是必需的,只是消息应该是
推送给所有在线的人。
- 我选择 Cometd 的主要动机是我读到有一个 很多文档和帮助,但正如我所见,几乎没有什么好的 网上的例子和项目网站上的文档是 被太多的技术细节所掩盖。我已经实施了一些 代码,但说实话,我不知道下一步该做什么,该去哪里 下一步。
这是我实现的一些代码,请看一下。
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
}
}
任何关于如何创建频道、订阅和通过它们发送消息的帮助都会很好。如果有人想为此聊天,请发表评论,我会为此创建一个聊天室。非常感谢。 :-)
【问题讨论】:
-
CometD 文档包括 tutorials 用于像您这样的简单案例。你读过和研究过它们吗?
-
@sbordet : 我有...不满足我正在寻找的用例。
标签: java spring spring-mvc server-push cometd