氛围框架一对一聊天

Atmosphere Framework one to one chat

本文关键字:聊天 一对一 框架 氛围      更新时间:2023-09-26

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

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

我开始知道 Atmosphere Framework 很容易提供这样的功能,并亲手接触了 Atmosphere (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 个哈希表,其中我根据过滤的 IP 添加 AtmosphereResource,然后我尝试将客户分配给哈希表中存在的管理员。

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

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

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

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

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

在这两种情况下,您都必须设置广播公司的处置:防止内存不足,因为它们是动态创建的。