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

Posted

技术标签:

【中文标题】使用 java 和 Atmosphere 的基本聊天应用程序【英文标题】:Basic chat application using java and Atmosphere 【发布时间】:2012-10-22 19:49:45 【问题描述】:

我正在尝试获取与 Glassfish 和 Jersery 一起使用的 Atmosphere 聊天程序的简单 example。

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

聊天资源文件只是一个使用 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: 没有 AtmosphereHandler 成立。确保在 META-INF/atmosphere.xml 中定义它或 使用@AtmosphereHandlerService 进行注释

我一定是缺少文件或设置配置,但我似乎无法找到位置(上面的消息说气氛.xml 丢失,但示例中没有出现)。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

你能发布你的maven pom吗?我很难编译这个:***.com/questions/17331792/…

以上是关于使用 java 和 Atmosphere 的基本聊天应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Atmosphere 框架,BroadcasterFactory.getDefault() 替代方案

具有每个请求问题(Hibernate 和 Shiro)的 WebSocket(Atmosphere) - Vaadin

JBoss EAP 6.1 上的 Atmosphere 和 WebSocket

如何使用 Atmosphere 框架调用传统的 REST-RPC 调用?

重新连接到服务器时如何强制 Atmosphere.js 使用首选传输?

服务器使用 Atmosphere IO 定期推送