Java 从web服务器到客户端的数据传输速率和传输量

Java 从web服务器到客户端的数据传输速率和传输量,java,javascript,http,webserver,client,Java,Javascript,Http,Webserver,Client,我正在编写一个在tomcat上运行的web应用程序。我需要传输大约25KB的数据(从服务器到客户端每20ms传输一次双/长值)。尝试使用服务器发送的事件进行传输,因为我只需要从服务器到客户端的单向通信通道 在服务器端使用java,在客户端使用java脚本 请建议我在这里所说的是否有意义,是否可以实现 我是网络开发新手 您为什么不亲自尝试一下呢?您会注意到本地主机和实际网络之间的巨大差异: Servlet(生成25kb的大消息): import java.io.IOException; 导入jav

我正在编写一个在tomcat上运行的web应用程序。我需要传输大约25KB的数据(从服务器到客户端每20ms传输一次双/长值)。尝试使用服务器发送的事件进行传输,因为我只需要从服务器到客户端的单向通信通道

在服务器端使用java,在客户端使用java脚本

请建议我在这里所说的是否有意义,是否可以实现


我是网络开发新手

您为什么不亲自尝试一下呢?您会注意到本地主机和实际网络之间的巨大差异:

Servlet(生成25kb的大消息):

import java.io.IOException;
导入java.io.Writer;
导入java.util.Random;
导入javax.servlet.AsyncContext;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
@WebServlet(name=“EventServlet”,urlPatterns={”/EventServlet”},asyncSupported=true)
公共类EventServlet扩展了HttpServlet{
受保护的void processRequest(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“文本/事件流;字符集=utf-8”);
setHeader(“缓存控制”、“无缓存”);
setHeader(“传输编码”、“分块”);
response.flushBuffer();
final AsyncContext ctx=request.startAsync();
ctx.setTimeout(0);
ctx.start(新的Runnable(){
@凌驾
公开募捐{
试一试{
Writer out=ctx.getResponse().getWriter();
对于(;;){
out.write(“事件:simpleEvent\n”);
out.write(“数据:”+randomString(25000)+“\n\n”);
ctx.getResponse().flushBuffer();
}
}捕获(例外e){
e、 printStackTrace();
}最后{
ctx.complete();
}
}
});
}
私有静态最终字符串AB=“0123456789abcdefghijklmnopqrstuvxyz”;
私有静态随机rnd=新随机();
公共静态字符串randomString(int len){
StringBuilder sb=新StringBuilder(len);
对于(int i=0;i
Index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

        <div>Number of Messages</div>
        <div id="out">

        </div>
        <div>Messages per Second:</div>

        <div id="mean">

        </div>

    </body>

    <script type="text/javascript">

        var startTime = new Date().getTime();
        var counter = 0;

        var eventSource = new EventSource("EventServlet");

        eventSource.addEventListener('simpleEvent', function(event){
            counter++;
            document.getElementById("out").innerHTML=counter;

            var seconds = (new Date().getTime()-startTime)/1000;
            document.getElementById("mean").innerHTML=counter/seconds;
        },false);

    </script>
</html>

JSP页面
邮件数
每秒消息数:
var startTime=new Date().getTime();
var计数器=0;
var eventSource=new eventSource(“EventServlet”);
eventSource.addEventListener('simpleEvent',函数(事件){
计数器++;
document.getElementById(“out”).innerHTML=计数器;
var seconds=(new Date().getTime()-startTime)/1000;
document.getElementById(“mean”).innerHTML=计数器/秒;
},假);

我会考虑使用WebSocket。服务器发送事件在框架和浏览器(例如IE10)中得到广泛支持。我想你的意思是服务器发送事件没有得到广泛支持。没关系,我关心的是这样的数据量和这样的传输速率是可以通过http实现的吗?我知道这可能是一个非常琐碎的问题,但我正在努力回答这个问题(请帮助。这并不是一件小事。有很多事情需要考虑:网络带宽和延迟,你打算如何处理客户端的数据?有一件事我绝对不会做,就是通过普通的互联网连接使用这样的应用程序。好的。但我正试图知道技术方面的瓶颈是什么。如果有的话。让我们来看看吧。)假设我们有无限的带宽,或者所有东西都在本地(同一台机器上)。HTTP或服务器发送的事件带来了什么瓶颈。如果有的话,非常感谢alex。我会试试。目前我在外面,出于好奇,如果你试过(看起来是这样的话),结果是什么?在本地主机上花费了多长时间…每秒2000条消息。在一台(无线)计算机中,大约每秒60条消息本地网络。你的盈亏平衡点是50。所以它非常接近,你必须计算一下,你正在对客户端上的数据做什么。但是,如果你有一个10G网络和延迟Alex,非常感谢这样的gr8响应,并为此花费了大量时间。你给了我这个教训,所以开始尝试一些事情,即使我对这一切都不熟悉。我会我想听听你对大局的看法。25kb是几千米的抄表数据(每米2个双倍值)。我想在图表中绘制实时数据。不是所有数据都在一起,而是根据用户的要求。但我确实想在客户端将所有数据缓存一段时间(10秒)。请建议正确的方法。(每200ms或其他时间重新计算10分,而不是每20ms计算1分)请让我知道,如果我没有用正确的话…我会详细说明…但我真的需要你的意见我不确定,如果这是正确的方式做这件事。每20毫秒传输25K是很多数据。你有没有想过只发送当前需要的数据。如果用户更改了他的选择,关闭当前正在运行的事件sou重新开始,打开一个新的
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

        <div>Number of Messages</div>
        <div id="out">

        </div>
        <div>Messages per Second:</div>

        <div id="mean">

        </div>

    </body>

    <script type="text/javascript">

        var startTime = new Date().getTime();
        var counter = 0;

        var eventSource = new EventSource("EventServlet");

        eventSource.addEventListener('simpleEvent', function(event){
            counter++;
            document.getElementById("out").innerHTML=counter;

            var seconds = (new Date().getTime()-startTime)/1000;
            document.getElementById("mean").innerHTML=counter/seconds;
        },false);

    </script>
</html>