Java 气氛框架一对一聊天

Java 气氛框架一对一聊天,java,javascript,jquery,jakarta-ee,atmosphere,Java,Javascript,Jquery,Jakarta Ee,Atmosphere,我对公司网站的实时聊天有一些要求。 我的主要要求是,, 我的办公室里有5个代理,负责回答客户的问题。 一次,许多客户可以提问,比如说客户提问,在这种情况下,我必须检查哪个代理是免费的,并为该(a)客户指定一名免费代理。 同样,对于所有其他客户,应分配专用代理,一旦所有代理都忙了,则应将进一步的客户请求排队 完成客户查询后,代理应该可以自由处理排队的客户 我开始知道Atmosphere框架很容易就提供了这样的功能,并亲自体验了Atmosphere(Atmosphere-jquery-pubsub-

我对公司网站的实时聊天有一些要求。 我的主要要求是,, 我的办公室里有5个代理,负责回答客户的问题。 一次,许多客户可以提问,比如说客户提问,在这种情况下,我必须检查哪个代理是免费的,并为该(a)客户指定一名免费代理。 同样,对于所有其他客户,应分配专用代理,一旦所有代理都忙了,则应将进一步的客户请求排队

完成客户查询后,代理应该可以自由处理排队的客户

我开始知道Atmosphere框架很容易就提供了这样的功能,并亲自体验了Atmosphere(Atmosphere-jquery-pubsub-1.0.18.war)

我能够运行一个程序,但它充当群聊,即如果写为“Hi”,那么它会广播到连接的所有浏览器,而不是我需要的代理客户案例,即一对一专用通信

@Path("/pubsub/{topic}")
public class JQueryPubSub
{

  @PathParam("topic")
  private Broadcaster topic;

  @GET
  public SuspendResponse<String> subscribe()
  {
    return new SuspendResponse.SuspendResponseBuilder().broadcaster(this.topic).outputComments(true).addListener(new EventsLogger()).build();
  }

  @POST
  @Broadcast
  @Produces({"text/html;charset=ISO-8859-1"})
  public Broadcastable publish(@FormParam("message") String message)
  {
    return new Broadcastable(message, "", this.topic);
  }
}
@Path(“/pubsub/{topic}”)
公共类jQueryPub
{
@PathParam(“主题”)
私营广播机构专题;
@得到
公共SuspendResponse订阅()
{
返回新的SuspendResponse.SuspendResponseBuilder();
}
@职位
@广播
@产生({“text/html;charset=ISO-8859-1”})
公共可广播发布(@FormParam(“消息”)字符串消息)
{
返回新的可广播(消息“”,this.topic);
}
}
我试图实现相同的功能是, 我使用了1个哈希表,其中我添加了基于过滤IP的AtmosphereSource,然后我尝试将客户分配给哈希表中的管理员


我能够实现将它变成非常复杂的代码,我认为有一种简单的方法来实现。

我认为您将所有对“客户代理”订阅到一个主题

尝试在主题名称中编码客户id和代理id

或者,对于定向到用户和代理的消息,可以有单独的端点。然后代理订阅(并发布)主题“/pubsub/customer/{customerId}”,客户订阅“/pubsub/agent/{agentId}”

或者只使用单个实体“/pubsub/user/{userId}”(如果客户ID和代理ID可能重叠,则在userId中编码实体类型,如agent123/customer123)

在这两种情况下,您都必须设置播放机的处置:,因为它们是动态创建的