【问题标题】:Implementation of facebook like chat on Java WebApp with Javascript使用 Javascript 在 Java WebApp 上实现 Facebook 之类的聊天
【发布时间】:2013-12-28 10:37:10
【问题描述】:

我是 XMPP 的新手,但我需要在网络应用程序上制作 facebook 之类的聊天。 该应用程序是一个使用 Java EE 7 编写的 webapp,带有 JSP、struts2、tile,使用 Tomcat 服务器。

我正在阅读有关如何实现该功能的内容,但我发现很少有解决方案 在我看来,最好的(因为它是最简单的)使用是: JavaScript strophe 和 Bosh 技术。在 Web 应用程序中授权后,我想从 java 连接 Bosh,接下来,我计划使用 bosh 会话连接来自 Strophe 的 bosh。

我的主要问题是: 当访问者更改站点时,实施会起作用吗? 例如。当他在主页上并进入设置时。 并且 Bosh 会话会一直持续用户登录 webapp 吗?

我不会使用 WebSockets 和 Atmosphere,因为我需要对项目进行很多更改,而我认为我无法应付。

如果这是个好主意,您有什么建议吗? 感谢您的帮助!

编辑:

我决定用 Atmosphere 来做,我用 java ee7 的 tomcat

首先我尝试运行任何气氛示例。当我在 tomcat 上将它作为一个新应用程序运行时,它可以工作,但是当我使用 struts 将它添加到我的应用程序时,我可能遇到了 web.xml 的问题 我的文件如下所示:

web.xml:

    <!-- Atmosphere -->
    <servlet>
        <description>AtmosphereServlet</description>
        <servlet-name>AtmosphereServlet</servlet-name>
        <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
        <async-supported>true</async-supported>
        <!-- Use it with mvn jetty:run -->
        <init-param>
            <param-name>org.atmosphere.cpr.packages</param-name>
            <param-value>org.atmosphere.samples</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
  <!-- Atmosphere Mapping-->
   <servlet-mapping>
        <servlet-name>AtmosphereServlet</servlet-name>
        <url-pattern>/chat/*</url-pattern>
    </servlet-mapping>

    ...     

    <!-- Filters -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <init-param>
            <param-name>actionPackages</param-name>
            <param-value>com.comarch</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

    ...

没有第一部分(使用 Atmosphere,一切正常)

下一部分是 websocket 类,取自示例: https://github.com/Atmosphere/atmosphere-samples/blob/master/samples/websocket-chat/src/main/java/org/atmosphere/samples/chat/WebSocketChat.java

我的网站看起来像:github.com/Atmosphere/atmosphere-samples/blob/master/samples/websocket-chat/src/main/webapp/index.html

我的 application.js 看起来像:

https://github.com/Atmosphere/atmosphere-samples/blob/master/samples/websocket-chat/src/main/webapp/jquery/application.js

我将第 15 行改为直接链接:

var request = { url: 'http://localhost:8081/chat/',

当我访问我的网站时,我可以在控制台中看到错误:

WebSocket 连接到 ws://localhost:8081/chat?X-Atmosphere-tracking-id=0&amp;X-Atmosphere-Framework=2.1.2-jquery&amp;X-Atmosphere-Transport=websocket&amp;X-Cache-Date=0&amp;Content-Type=application%2Fjson&amp;X-atmo-protocol=true failed: Error during WebSocket handshake: Unexpected response code: 501

【问题讨论】:

  • “最佳”解决方案可能是基于意见的,但我会说用 Erlang 编写它是最好的解决方案,就像 Facebook 所做的那样,但是 websockets 也是一个不错的选择,同时编写在服务器端使用带有 XMLHttpRequest 和 Java 的普通 javascript 听起来根本不是最好的解决方案,但它肯定是可行的。

标签: javascript jakarta-ee xmpp strophe


【解决方案1】:

如果您可以在 JavaScript 中使用 Strophe,它会起作用。由您决定什么最适合您的网站。在后端使用 Java 进行初始身份验证,并将会话信息传递给 Strophe,然后附加。当用户更改页面时,您可以重新附加到现有的 Bosh 会话(您必须跟踪页面之间的 RID)。

例如,请参阅:http://metajack.im/2008/10/03/getting-attached-to-strophe/

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多