气氛框架一对一聊天

3
我需要为公司网站提供实时聊天的功能。我的主要需求是,办公室里有5名代理人负责回答客户的问题。当许多客户同时提出问题时,例如客户A提出一个问题,那我需要检查哪个代理人是空闲的,并将1个空闲的代理人分配给该客户(A)。类似地,其他所有客户都应分配专门的代理人,一旦所有代理人都忙碌,则后续客户请求应排队等待。完成客户查询后,代理人应该可以处理排队的客户。
我了解到Atmosphere Framework可以轻松提供这种功能,并且已经开始使用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);
  }
}

我尝试实现相同的功能,使用了一个HashTable。我会根据过滤后的IP添加AtmosphereResource,然后尝试将客户端分配给HashTable中的管理员。
虽然我已经实现了这个目标,但代码变得非常复杂,我认为还有更简单的方法可以做到。
1个回答

0

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

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

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

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

在这两种情况下,您都需要设置广播器的处理方式:Preventing Out of Memory,因为它们是即时创建的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接