簡體   English   中英

客戶端套接字(UDP)中的PHP內存泄漏

[英]PHP memory leak in client socket (UDP)

:)

我試圖從我的PHP服務器中的ac#實時應用程序接收數據,然后根據該數據在瀏覽器中移動圖片。

數據發送和接收沒有問題,但是運行代碼時,chrome的內存使用越來越多。

如果我在while循環中關閉套接字,性能會很低,但內存使用情況卻很正常,所以這與打開套接字有關...

這是PHP代碼:

<?php 
//http://www.binarytides.com/udp-socket-programming-in-php/
//Create a UDP socket
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
   die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if( !socket_bind($sock, "0.0.0.0" , 41181) )
{
    die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";

//Do some communication, this loop can handle multiple clients
while(1)
{
//echo "Waiting for data ... \n";
   $r = socket_recvfrom($sock, $buf, 20, 0, $remote_ip, $remote_port);
 ?>

 <script type="text/javascript">    
    var data =  "<?php echo $buf ?>";     
 </script>

<?php
 }
 socket_close($sock);
 ?>

這是c#函數(數據發送方):

 public static void SendUDP(string hostNameOrAddress, int destinationPort, string data, int count)
    {
    //class member :  Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram, ProtocolType.Udp);
    //socket is defined as class member and used here
        for (int i = 0; i < count; i++)
        {
            socket.SendTo(buffer, endPoint);
        }
    }    

謝謝 ! :)

您使用的技術稱為“長時間輪詢”。 這是一種模擬雙向通信的有趣方式,尤其是在使用舊瀏覽器的情況下,但有缺點。

問題在於,隨着時間的流逝,您將向瀏覽器發送大量有效負載。

隨着您不斷地寫入瀏覽器,頁面大小以及DOM樹隨之增加。 所有這些都必須存儲在內存中。 我假設當您僅發送幾個腳本塊時,性能仍然可以。 但是,成千上萬的它們當然會耗盡您的記憶。

另外,如果您使用的是診斷工具,例如Chrome開發人員工具或Firefox中的Firebug,它們會存儲大量的調試信息,這也會占用大量內存。 (嘗試禁用它們。)

如果您只是出於娛樂和實驗目的而編寫了此代碼,則不必擔心內存消耗。 這是長時間輪詢所固有的。

但是,如果您嘗試使用真正的雙向通信編寫Web應用程序,則應使用Web套接字之類的東西(服務器端可能使用與PHP不同的語言)。

這不是我問題的真正答案,但我的經驗可能會對某人有所幫助。

我無法使用PHP服務器進行這種“長時間輪詢”,這是PHP的問題,而不是瀏覽器的問題。 我已經使用Node.js服務器開發了一個很好的應用程序。

我的C#應用​​程序用於處理相機中的圖像。 圖像處理產生的實時數據被發送到Node.js服務器,並從服務器發送到瀏覽器。

現在,我使用網絡技術來開發圖形用戶界面,這在.Net中很難實現,它還有許多其他優點...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM