Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Sockets Servicestack redis在哈希写入时阻塞,套接字读取时无异常_Sockets_Redis_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Blocking_Hash - Fatal编程技术网 servicestack,blocking,hash,Sockets,Redis,servicestack,Blocking,Hash" /> servicestack,blocking,hash,Sockets,Redis,servicestack,Blocking,Hash" />

Sockets Servicestack redis在哈希写入时阻塞,套接字读取时无异常

Sockets Servicestack redis在哈希写入时阻塞,套接字读取时无异常,sockets,redis,servicestack,blocking,hash,Sockets,Redis,servicestack,Blocking,Hash,当我使用ServiceStack redis组件调试代码时,我注意到一个bug,它导致我的线程在io阻塞模式下停止响应 我使用的代码是在servicestack哈希上存储一个值,如下代码所示。这里的默认工厂是一个池redis客户端管理器,发送和接收线程计数为20: using (IRedisClient client = defaultFactory.GetClient()) { client.Hashes[cacheName][key] = SerializationHelper.Se

当我使用ServiceStack redis组件调试代码时,我注意到一个bug,它导致我的线程在io阻塞模式下停止响应

我使用的代码是在servicestack哈希上存储一个值,如下代码所示。这里的默认工厂是一个池redis客户端管理器,发送和接收线程计数为20:

using (IRedisClient client = defaultFactory.GetClient())
{
    client.Hashes[cacheName][key] = SerializationHelper.Serialize(value, ST.Binary);
}
从堆栈跟踪中,我看到Write-to-hash实际上调用了一个socket-receive函数——它阻止了操作——我应该如何在代码中处理这种情况。在我的接收代码中,我总是设置一个超时,因为这是一个写操作,所以似乎没有超时选项

我的跟踪如下:

[Managed to Native Transition]  
System.dll!System.Net.Sockets.Socket.Receive(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode) + 0xbd bytes    
System.dll!System.Net.Sockets.Socket.Receive(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags) + 0x1d bytes  
System.dll!System.Net.Sockets.NetworkStream.Read(byte[] buffer, int offset, int size) + 0x83 bytes  
mscorlib.dll!System.IO.BufferedStream.ReadByte() + 0xa9 bytes   
ServiceStack.Redis.dll!ServiceStack.Redis.RedisNativeClient.SafeReadByte() + 0x25 bytes 
ServiceStack.Redis.dll!ServiceStack.Redis.RedisNativeClient.ReadLong() + 0x3b bytes 
ServiceStack.Redis.dll!ServiceStack.Redis.RedisNativeClient.SendExpectLong(byte[][] cmdWithBinaryArgs) + 0xa6 bytes 
ServiceStack.Redis.dll!ServiceStack.Redis.RedisNativeClient.HSet(string hashId, byte[] key, byte[] value) + 0xbd bytes  
ServiceStack.Redis.dll!ServiceStack.Redis.RedisClient.SetEntryInHash(string hashId, string key, string value) + 0x5d bytes  
ServiceStack.Redis.dll!ServiceStack.Redis.RedisClientHash.this[string].set(string key, string value) + 0x48 bytes   
我使用的servicestack版本是4.0.9。
提前谢谢

这种情况是间歇性发生还是一直发生?你调查过防火墙问题吗?显然,套接字在请求后没有得到回复。它应该有一个超时,我没有查看ServiceStack,所以我不知道如果你不能通过它,它会设置什么间隔。Redis sentinel也可能在这方面帮助您。它是间歇性发生的,不是一直发生的,因此不应该是防火墙问题。我会查一下redis sentinel,它看起来很有趣。