2009-11-23 23 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