繁体   English   中英

服务器发送的事件代码不适用于jelastic

[英]Server Sent event code not working on jelastic

我正在学习Java中的Server Sent事件,为此,我使用一个简单的示例。 我正在使用Windows 7,Java 1.7,Tomcat 7,Eclipse Indigo。 我已经创建了一个servlet(SseServer.java),该servlet的代码如下:

package sse; 
import java.io.IOException; <br/>
import java.io.PrintWriter;<br/>
import java.util.Date;<br/>

import javax.servlet.ServletException;<br/>
import javax.servlet.annotation.WebServlet;<br/>
import javax.servlet.http.HttpServlet;<br/>
import javax.servlet.http.HttpServletRequest;<br/>
import javax.servlet.http.HttpServletResponse;<br/>

@WebServlet("/SseServer")<br/>
public class SseServer extends HttpServlet {<br/>
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          // Besides "text/event-stream;", Chrome also needs charset, otherwise
          // does not work
          // "text/event-stream;charset=UTF-8"
          response.setContentType("text/event-stream;charset=UTF-8");
          response.setHeader("Cache-Control", "no-cache");
          response.setHeader("Connection", "keep-alive");

          PrintWriter out = response.getWriter();

          while (true) {
           out.print("id: " + "ServerTime" + "\n");
           out.print("data: " + new Date().toLocaleString() + "\n\n");
           out.flush();
           // out.close(); //Do not close the writer!
           try {
            Thread.currentThread().sleep(1000);
           } catch (InterruptedException e) {
            e.printStackTrace();
           }
          }

    }

}

我将结果显示在html SSE.html中,其代码如下所示:

 <!DOCTYPE html> <html> <body> <h1>Current Server Time : </h1> <div id="ServerTime"></div> <script> if (typeof (EventSource) !== "undefined") { var source = new EventSource("http://localhost:8080/SSE/SseServer"); // http://eastern1.j.layershift.co.uk //var source = new EventSource("http://eastern1.j.layershift.co.uk/SSE/SseServer"); source.onmessage = function(event) { document.getElementById("ServerTime").innerHTML += event.data + "<br><br>"; }; } else { document.getElementById("ServerTime").innerHTML = "Sorry, your browser does not support server-sent events..."; } </script> </body> </html> 

当我每隔一秒钟在本地运行此代码时,我就能看到当前时间。 我还在chrome,firefox等几种浏览器上检查了它。

由于此代码运行良好,因此我决定将其部署在云上,因此我选择了Jelastic.com。 我创建了一个战争文件,并将其部署在Jelastic上,并尝试运行示例应用程序。 但是当我从云中运行应用程序时,我只能看到

当前服务器时间:

我看不到时间。 有人可以告诉我为什么会这样吗? 我的代码需要更改吗? 如果是,那么有人可以建议它应该是什么吗? 还是在创建War文件时更改Eclipse中的其他文件/设置?

任何帮助深表感谢。

您使用了绝对链接,这是一个不好的做法。 尝试使用相对链接。 您的错误是链接与服务器上的路径不对应

   var source = new EventSource("/SseServer");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM