【发布时间】: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 看起来像:
我将第 15 行改为直接链接:
var request = { url: 'http://localhost:8081/chat/',
当我访问我的网站时,我可以在控制台中看到错误:
WebSocket 连接到
ws://localhost:8081/chat?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=2.1.2-jquery&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application%2Fjson&X-atmo-protocol=true failed: Error during WebSocket handshake: Unexpected response code: 501
【问题讨论】:
-
“最佳”解决方案可能是基于意见的,但我会说用 Erlang 编写它是最好的解决方案,就像 Facebook 所做的那样,但是 websockets 也是一个不错的选择,同时编写在服务器端使用带有 XMLHttpRequest 和 Java 的普通 javascript 听起来根本不是最好的解决方案,但它肯定是可行的。
标签: javascript jakarta-ee xmpp strophe