使用java和Atmosphere的基本聊天应用程序

时间:2012-10-22 19:49:45

标签: java websocket atmosphere

我正在尝试使用Glassfish和Jersery进行简单的example大气聊天计划。

到目前为止,我有一个基本的maven webapp原型具有以下结构:

project setup

聊天资源文件只是一个使用Atmosphere注释的简单REST服务:

package core;

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

import org.atmosphere.annotation.Broadcast;
import org.atmosphere.annotation.Suspend;

@Path("/")
public class ChatResource {

    @Suspend(contentType = "application/json")
    @GET
    public String suspend() {
        return "";
    }

    @Broadcast(writeEntity = false)
    @POST
    @Produces("application/json")
    public Response broadcast(Message message) {
        return new Response(message.author, message.message);
    }
}

消息和响应类只是简单的POJO包装器。 index.jsp,application.js,jquery.atmosphere.js和jquery.js直接从示例项目中复制(找到here)。

我的web.xml设置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <description>AtmosphereServlet</description>
        <servlet-name>AtmosphereServlet</servlet-name>
        <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>AtmosphereServlet</servlet-name>
        <url-pattern>/chat/*</url-pattern>
    </servlet-mapping>
</web-app>

导航到该页面时,收到以下错误:

  

抱歉,您的套接字存在问题或服务器已关闭

如果我导航到该网页尝试访问的路径(http://localhost:8080/.../chat),我会收到以下消息:

  

org.atmosphere.cpr.AtmosphereMappingException:No AtmosphereHandler   找到。确保在META-INF / atmosphere.xml或中定义它   使用@AtmosphereHandlerService注释

我必须缺少文件或设置配置,但我似乎无法找到位置(上面的消息显示缺少atmosphere.xml,但这不会出现在示例中)。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

默认情况下,Glassfish中未启用Web套接字协议。

您可以使用以下命令启用它:

asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-1.http.websockets-support-enabled=true

这就是我需要让我的连接正常工作。