我有一个关于WebSocket的简单问题。我知道WebSocket协议基于TCP。而且我知道TCP连接是半开放的。
这是否也意味着WebSocket连接也是半开放的?我试图在互联网上进行搜索,但找不到可靠的来源。
答案 0 :(得分:1)
半开是指套接字连接不同步的状态。
例如,当移动设备移出接收区域并且仅一侧(即设备)尝试发送数据(并失败)时,可能会导致此错误。
在此示例中,移动设备将连接标记为已关闭,而服务器将在等待数据时,很高兴地没有意识到连接已中断。
您可以了解有关此here的更多信息。
除非发生错误,否则TCP / IP连接将不半打开。它们可以打开一半(依赖TCP / IP层的WebSocket连接也可以打开)。
要解决此问题,请使用定期的<Grid>
<Label x:Name="label" Content="Events" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<ScrollViewer HorizontalAlignment="Left" Height="619" Margin="0,26,0,0" VerticalAlignment="Top" Width="450" VerticalScrollBarVisibility="Hidden">
<Grid x:Name="Schedule" HorizontalAlignment="Left" Height="Auto" VerticalAlignment="Top" Width="450" Margin="10,0,0,0"/>
</ScrollViewer>
<Grid x:Name="grdFilters" HorizontalAlignment="Left" Height="619" Margin="490,26,-176,0" VerticalAlignment="Top" Width="135" Background="{StaticResource TransparentBackground}" Panel.ZIndex="95">
<CheckBox x:Name="chckAll" Content="All" HorizontalAlignment="Left" Margin="0,10,0,0" VerticalAlignment="Top" Checked="chckAll_Checked" Unchecked="chckAll_Unchecked"/>
<Grid x:Name="grdFilters" HorizontalAlignment="Left" Height="588" Margin="0,31,0,0" VerticalAlignment="Top" Width="136"/>
</Grid>
<Button x:Name="btnFilters" Content="" Margin="436,223,-18,0" VerticalAlignment="Top" Background="Cyan" Opacity="0.15" Style="{StaticResource MyTabStyle}" Height="80" Click="btnFilters_Click"/>
</Grid>
。该ping
最终将公开半开连接,因此可以检测到错误并可以关闭连接。