Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttpRequest创建几个传出端口-为什么?_Javascript_Python_Ajax_Post_Xmlhttprequest - Fatal编程技术网

Javascript XMLHttpRequest创建几个传出端口-为什么?

Javascript XMLHttpRequest创建几个传出端口-为什么?,javascript,python,ajax,post,xmlhttprequest,Javascript,Python,Ajax,Post,Xmlhttprequest,我是JavaScript和AJAX的新手。一般来说,网络通信也是新的 我试图创建一个动态更新的网页,与Python服务器通信。我一直在本地测试所有东西,到目前为止,所有的工作。。我想 Python服务器在本地主机端口8000上提供“page.html”。HTML页面使用AJAX和XMLHttpRequest将数据发布到服务器。我可以将数据发送到服务器 问题出在这里:我的服务器表示每次发布都会打开一个新的客户端端口。这让我感到害怕,因为我已经习惯了TCP套接字,其中通信发生在单个端口上 以下是服务

我是JavaScript和AJAX的新手。一般来说,网络通信也是新的

我试图创建一个动态更新的网页,与Python服务器通信。我一直在本地测试所有东西,到目前为止,所有的工作。。我想

Python服务器在本地主机端口8000上提供“page.html”。HTML页面使用AJAX和XMLHttpRequest将数据发布到服务器。我可以将数据发送到服务器

问题出在这里:我的服务器表示每次发布都会打开一个新的客户端端口。这让我感到害怕,因为我已经习惯了TCP套接字,其中通信发生在单个端口上

以下是服务器代码(server.py):

以下是HTML代码(page.HTML):

要测试launch server.py,请转到浏览器并键入

http://localhost:8000/page.html OR http://127.0.0.1:8000/page.html
正如您所看到的,每个POST的端口增量。我做错什么了吗?我觉得XHR仍然存在,需要关闭,但从我在线阅读的内容来看,显然每个帖子都需要创建一个新的XHR。谢谢

那很好。服务器从其可用池中为这些端口选择一个新的源端口-这确保每个请求及其建立的相应TCP连接具有唯一的HTTP。(选择用于传入连接的源端口的是服务器。)

无法保证将使用相同的客户端端口,而且除非TCP连接已完全关闭,否则同一源端口不能用于同一源IP;这包括1中的内容。当TCP连接完全关闭时,源端口将释放回可用池

不同的源端口并不表示存在问题;而增加的值仅仅是一个实现(和可用池)细节。另一方面,从不关闭的连接可能是一个问题。使用命令查看TCP连接及其状态


1在具有过多来自同一远程IP的快速创建连接的系统上,可能需要启用


这篇文章读得很好;它包括漂亮的图表、很好的解释和对实际限制的讨论。

好吧,我相信你没有做错任何事。 只是你误解了self.client\u地址的价值

self.client_地址中的端口不是服务器上的端口,而是用户计算机上用于与web服务器通信的端口

您还可以在此处查看有关端口的一些有用信息: (请检查标记为[正确答案]的答案)


谢谢你的解释。我使用netstat查看了一下,看到端口被获取了几分钟(当时它们是“TIME_WAIT”),然后就被释放了。我担心的是,我希望使用POST以较快的速度(100毫秒)更新网页上的绘图。我担心这样做会吃掉一吨波特。有没有办法强制一个端口,或者在几秒钟后关闭客户端的TCP连接?@radian通常只有在短时间内处理来自同一源IP的[数万]个请求时才会出现问题。TCP连接细节本身由网络/驱动程序控制,并自动“关闭”(可以使用各种设置,以及强制重用)-此外,还发现了这篇有趣的文章(图片很方便)@radian,也就是说,您可能对“长轮询”感兴趣,COMET,或者WebSocket作为每分钟创建600个连接的替代方案(特别是当有多人尝试做相同的事情时!):}
<html>
    <head></head>
    <body>
        <script type="text/javascript">
            function send_receive() {
                var http = new XMLHttpRequest();
                var data = document.test_form.data.value;
                var params = "data=" + data.toString();

                http.open("POST", "page.html", true);
                http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                http.setRequestHeader("Content-length", params.length);
                http.setRequestHeader("Connection", "close");
                http.send(params);
            }
        </script>

        <form name=test_form>
            Data: <input type="text" name="data" value="1">
            <input type=button onClick="send_receive();" value="Send"><br /><br />
        </form>
    </body>
</html>
127.0.0.1 @ 52884 --> {'data': ['1']}
127.0.0.1 @ 52885 --> {'data': ['2']}
127.0.0.1 @ 52886 --> {'data': ['3']}
127.0.0.1 @ 52887 --> {'data': ['4']}
127.0.0.1 @ 52888 --> {'data': ['5']}
127.0.0.1 @ 52889 --> {'data': ['6']}
http://localhost:8000/page.html OR http://127.0.0.1:8000/page.html