Java 从另一个客户端获取GET请求时服务器端推送到客户端

Java 从另一个客户端获取GET请求时服务器端推送到客户端,java,websocket,long-polling,atmosphere,Java,Websocket,Long Polling,Atmosphere,我试图实现一个场景,当另一个客户端B向服务器发出GET请求时,我需要通知一个特定的客户端(比如a)。 我正在寻找服务器推送的氛围。 我已经成功地将B连接到服务器,如果通过大气发送消息,我可以推送他。但是这个特殊的场景我被卡住了。谁能提出一个可行的解决方案? 还有一些指向方向的指针吗 import org.atmosphere.annotation.Broadcast; import org.atmosphere.annotation.Suspend; import org.atmosphere.

我试图实现一个场景,当另一个客户端B向服务器发出GET请求时,我需要通知一个特定的客户端(比如a)。 我正在寻找服务器推送的氛围。 我已经成功地将B连接到服务器,如果通过大气发送消息,我可以推送他。但是这个特殊的场景我被卡住了。谁能提出一个可行的解决方案? 还有一些指向方向的指针吗

import org.atmosphere.annotation.Broadcast;
import org.atmosphere.annotation.Suspend;
import org.atmosphere.config.service.AtmosphereService;
import org.atmosphere.cpr.AtmosphereResourceEvent;
import org.atmosphere.cpr.AtmosphereResourceEventListenerAdapter;
import org.atmosphere.jersey.JerseyBroadcaster;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

/**
 * Simple chat resource demonstrating the power of Atmosphere. This resource supports transport like WebSocket, Streaming, JSONP and Long-Polling.
 *
 * @author Jeanfrancois Arcand
 */
@Path("/")
@AtmosphereService (broadcaster = JerseyBroadcaster.class)
public class ChatResource {

    /**
     * Suspend the response without writing anything back to the client.
     *
     * @return a white space
     */
    @Suspend(contentType = "application/json", listeners = {OnDisconnect.class})
    @GET
    public String suspend() {

        return "";
    }

    /**
     * Broadcast the received message object to all suspended response. Do not write back the message to the calling connection.
     *
     * @param message a {@link Message}
     * @return a {@link Response}
     */
    @Broadcast(writeEntity = false)
    @POST
    @Produces("application/json")
    public Response broadcast(Message message) {
        return new Response(message.author, message.message);
    }

    public static final class OnDisconnect extends AtmosphereResourceEventListenerAdapter {
        /**
         * {@inheritDoc}
         */
        @Override
        public void onDisconnect(AtmosphereResourceEvent event) {
            System.out.println(event);
        }
    }

}

不要使用@Broadcast,而是直接使用Broadcaster工厂使用Broadcaster,并调用Broadcast.Broadcast(message,ClientB)。看,有很多这样的例子


--Jeanfrancois

通过使用广播工厂直接使用广播机并调用广播机。广播(消息,客户端B)

您能发布您的代码吗?我会直接使用。服务器端代码将识别出它应该通知客户机,并且它将使用WebSocket来这样做。查看帖子,我想你会发现一种实现这种交流的方法。希望我能帮忙!上面的代码实际上也处理websocket请求。我真正的问题是,发出HTTP-GET调用的客户端实际上向先前注册的客户端发起推送请求。我们如何将该客户机映射为-->HTTP/GET-->服务器-->套接字推送-->客户机BNo应答这么长时间??