2009-11-23 51 views
4

我開發了一個簡單的異步服務器,它偵聽發送一些小塊數據的unix套接字和同步客戶端。從客戶端發送數據到服務器收到數據的時刻之間的時間是完全隨機的,從1秒到9秒。我想知道爲什麼是這個原因?服務器被實現爲顯示在MSDN例如這裏(使用beginReceive):http://msdn.microsoft.com/en-us/library/fx6588te.aspx單聲道,c#,套接字,性能

EndPoint ep = new UnixEndPoint(_fileName); 
_socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP); 

try 
{ 
    _socket.Bind(ep); 
    _socket.Listen(_maxConnectionsInQuee); 

    while(true) 
    { 
     done.Reset(); 
     _socket.BeginAccept(new AsyncCallback(AcceptCallback), null); 
     done.WaitOne(); 
    } 
} 

並在客戶端:

EndPoint ep = new UnixEndPoint(_fileName); 
_socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP); 
_socket.Connect(ep); 
byte[] bytes = Encoding.UTF8.GetBytes(message); 
_socket.Send(bytes); 

方法,該方法將數據發送到服務器從web服務方法調用(通過xsp2運行)。

+0

你用什麼作爲客戶端? – Gonzalo 2009-11-23 15:16:05

+1

順便說一句,我正在編輯標題。這些不是unix域套接字。 – Gonzalo 2009-11-23 15:16:43

+0

其實他們是。我使用Mono.Unix中的UnixEndPoint,這幾乎是唯一的區別。我已經在上面的文章中添加了一些代碼來澄清 – 2009-11-23 17:26:38

回答

5

它發生在單聲道Unix套接字確定:)。我有一些與Mono.Unix和unix域套接字完全無關的線程問題。感謝你的幫助。

+0

嗨,這工作在Windows上,還是嚴格unix綁定? – Rbjz 2015-03-06 00:14:56

-2

這很可能是由於Nagle算法延遲發送數據直到超時或緩衝區已滿。您可以通過設置NoDelay選項來禁用此功能。

+0

該問題被編輯爲刪除對域套接字的引用。 – 2009-11-24 08:35:19

+0

它不應該。我正在使用unix域套接字... – 2009-12-22 20:05:02

+0

Nagle只是網絡套接字的一個問題,它不適用於Unix域套接字。 – markshep 2015-09-30 10:29:13