我正在尝试为GWT应用程序创建一个记录器,作为评估GWT的练习.我特别想要做的就是让我可以在服务器端的任何一点向客户端标签发布消息.因此,如果服务器上发生了一些有趣的事情,则可以更新客户端.
我的第一个问题是,这是可能的,我可以理解它不存在.
其次,如果有可能,我应该在哪里寻找信息,我已经尝试了谷歌和他们的文档,所有的陈列柜都没有.
谢谢
在nginx网站上,它们是HTTP PUSH的两个模块.
他们来了:
http://pushmodule.slact.net/ 和 http://wiki.nginx.org/HttpPushStreamModule
哪一个更好?
你用过其中一个吗?你更倾向哪个?
提前致谢.
我想每2秒将数据推送到jsp,而客户端请求它.
我在这里使用Spring with Hibernate.
我正在显示谷歌地图标记,我想通过从数据库获取数据每2秒更新标记位置,但是我已经从数据库获取数据每2秒,但我无法将数据推送到此JSP.
@Scheduled(fixedRate = 2000)
public void getData(){
// TODO Auto-generated method stub
DeviceDetails deviceDetails = realTimeDataDAO.getDeviceDetails(deviceId);
System.out.println(deviceDetails);
}
Run Code Online (Sandbox Code Playgroud)
我必须每2秒显示一些数据.谁能告诉我怎么做?
任何人都知道Comet Ajax Push技术,它会在这种情况下工作吗?
具有服务器推送支持的Jetty的HTTP/2客户端已在Jetty 9.3 RC(Link)中实现.但是,我没有找到任何与此相关的文档或示例代码.可以任何人提供示例代码,例如从该站点接收推送的资源:https://nghttp2.org(已启用http2服务器推送的公共服务器)
---更新1 --- 我试图测试这个文件,正如sbordet所说的那样.但是,在执行此行之后
mvn compile exec:java
Run Code Online (Sandbox Code Playgroud)
我遇到了这个错误
[INFO] --- exec-maven-plugin:1.4.0:java (default-cli) @ http2client ---
2015-05-05 01:52:47.808:INFO::com.example.Client.main(): Logging initialized @3096ms
[WARNING]
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:293)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.TimeoutException
at org.eclipse.jetty.util.FuturePromise.get(FuturePromise.java:130)
at com.example.Client.main(Client.java:55)
... 6 more
Run Code Online (Sandbox Code Playgroud)
这是我的 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>http2client</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>http2client</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-client</artifactId>
<version>9.3.0.M2</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty.alpn</groupId>
<artifactId>alpn-boot</artifactId> …
Run Code Online (Sandbox Code Playgroud) http/2服务器推送的大多数用例是抢先将资产文件(例如javascript和css文件)推送到浏览器.我想知道可以使用http/2服务器推送将动态有效负载(如JSON文档)发送到客户端应用程序吗?从http2规范,它没有提到任何关于这一点.任何人都可以详细说明这个吗?为什么或者为什么不?
HTTP/2 服务器推送使我们的网站在第一次查看时速度显着加快。然而,Firefox 似乎从大约 12 月开始就禁用了服务器推送。v56。
在webpagetest.org 上,Patrick Meenan 建议开发人员暂时关闭此功能。在网上搜索,我找不到任何相关确认或信息。但差不多半年后,我们的网站在 Firefox 中的加载速度仍然比在 Chrome 中慢得多,这显然是由于 Firefox 不接受服务器推送。
有谁知道服务器推送是否以及何时会回归 Firefox?
当我使用 grpc 编写服务时,我尝试通过服务器端推送机制将 http/2 与 websocket 进行比较。
我知道对于 websocket,客户端将向服务器发送带有 Upgrade: WebSocket 和 Connection: Upgrade 标头的请求并建立长期连接。连接建立后,服务器将自由发送数据。
但对于 grpc,由于它是在 http/2 上路由的,来自 wiki 页面https://en.wikipedia.org/wiki/HTTP/2_Server_Push,它表示服务器需要预测客户端将发送的潜在请求,并尽早发送 PUSH_PROMISE 帧。
这是我的两个问题:
这是否意味着服务器还需要从客户端接收相应的响应(请求)来响应此 PUSH_PROMISE 标头,以决定客户端是否想要接收或拒绝特定推送?
在 Grpc 中,如果我有服务器端流,请说每 1 秒从服务器发送一条消息。这是否意味着服务器需要每 1 秒或至少在服务器推送到客户端的每个数据帧之前向客户端发送 PUSH_PROMISE?
通过这里回答的几个例子和问题(主要是 http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html?page=3),我想让服务器发送多个响应没有完成请求的客户的时间.当请求超时时,我创建另一个,依此类推.
我想避免长时间轮询,因为每次收到响应时我都必须重新创建请求.(而且这不是servlet 3.0的异步功能所针对的).
我在服务器端有这个:
@WebServlet(urlPatterns = {"/home"}, name = "async", asyncSupported = true)
public class CometServlet extends HttpServlet {
public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException {
AsyncContext ac = request.startAsync(request, response);
HashMap<String, AsyncContext> store = AppContext.getInstance().getStore();
store.put(request.getParameter("id"), ac);
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个写入异步上下文的线程.
class MyThread extends Thread {
String id, message;
public MyThread(String id, String message) {
this.id = id;
this.message = message;
}
public void run() {
HashMap<String, AsyncContext> store = AppContext.getInstance().getStore();
AsyncContext ac …
Run Code Online (Sandbox Code Playgroud) 我试图用Java创建一个简单的服务器推送示例.
在服务器中,推送客户端只会向服务器发送一次请求.服务器使该客户端的HTTP请求保持活动状态,并继续将更新的数据发送到客户端.请让我知道如何继续或可以给我一些初步的想法.
如果我们需要使用Servlet 3.0或JMS,请告诉我...
是否可以使用Servlet3.0和HTML5?
当我在视图上使用 @Push 注释时,出现以下异常(JDK 16、Vaadin 19.0.7、Spring boot 2.4.7):
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) ~[spring-boot-2.4.7-20210610.075414-42.jar:2.4.7-SNAPSHOT]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:577) ~[spring-context-5.3.8.jar:5.3.8]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.7-20210610.075414-42.jar:2.4.7-SNAPSHOT]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771) ~[spring-boot-2.4.7-20210610.075414-42.jar:2.4.7-SNAPSHOT]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763) ~[spring-boot-2.4.7-20210610.075414-42.jar:2.4.7-SNAPSHOT]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) ~[spring-boot-2.4.7-20210610.075414-42.jar:2.4.7-SNAPSHOT]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) ~[spring-boot-2.4.7-20210610.075414-42.jar:2.4.7-SNAPSHOT]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) ~[spring-boot-2.4.7-20210610.075414-42.jar:2.4.7-SNAPSHOT]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1318) ~[spring-boot-2.4.7-20210610.075414-42.jar:2.4.7-SNAPSHOT]
at net.cbsolution.chameleon.ChameleonApplication.main(ChameleonApplication.java:10) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.7-20210610.075414-42.jar:2.4.7-SNAPSHOT]
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:142) ~[spring-boot-2.4.7-20210610.075414-42.jar:2.4.7-SNAPSHOT]
at …
Run Code Online (Sandbox Code Playgroud) server-push ×10
http2 ×4
java ×4
java-ee ×2
servlet-3.0 ×2
callback ×1
client-side ×1
firefox ×1
grpc ×1
gwt ×1
javascript ×1
jetty ×1
nghttp2 ×1
nginx ×1
servlets ×1
spring ×1
vaadin ×1