Atmosphere Framework一对一聊天

时间:2013-11-17 07:30:38

标签: java javascript jquery java-ee atmosphere

我对公司网站的实时聊天有一些要求。 我的主要要求是, 我办公室有5个代理商响应客户查询。 在许多客户可以提出问题时,请说客户A问问题,在这种情况下,我必须检查哪个代理是免费的,并为该(A)客户提供1个免费代理。 同样,对于所有其他客户,应分配专用代理,并且一旦所有代理忙,则应进一步将客户请求排队。

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

我开始知道Atmosphere Framework很容易提供这样的功能,并且让我的手放在Atmosphere(氛围-jquery-pubsub-1.0.18.war)。

我能够运行一个程序,但它正在充当群聊,即如果写成“嗨”,那么它将被广播到所有连接的浏览器,而我需要作为代理 - 客户案例,即一对一的专用通信。

@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);
  }
}

我试图实现相同的功能是, 我拿了1个HashTable,在其中我添加了基于Filtered IP的AtmosphereResource,然后我尝试将Customer分配给HashTable中的Admin。

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

1 个答案:

答案 0 :(得分:0)

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

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

或者,您可以为指向用户和代理的邮件设置单独的端点。然后代理订阅(并发布)主题“/ pubsub / customer / {customerId}”,客户订阅“/ pubsub / agent / {agentId}”。

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

在这两种情况下,您都必须设置广播机构的处理:Preventing Out of Memory,因为它们是即时创建的。