我对公司网站的实时聊天有一些要求。 我的主要要求是, 我办公室有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。
我能够实现它变得非常复杂的代码,我认为会有简单的方法来实现它。
答案 0 :(得分:0)
我认为您正在将所有对“客户代理”订阅到单个主题。
尝试在主题名称中编码客户ID和代理ID。
或者,您可以为指向用户和代理的邮件设置单独的端点。然后代理订阅(并发布)主题“/ pubsub / customer / {customerId}”,客户订阅“/ pubsub / agent / {agentId}”。
或者只使用单个实体“/ pubsub / user / {userId}”(如果客户ID和代理ID可能重叠,则在userId中编码实体类型,如agent123 / customer123)。
在这两种情况下,您都必须设置广播机构的处理:Preventing Out of Memory,因为它们是即时创建的。