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 记录TCP可能的错误/不可预测的行为_Sockets_Networking_Exception Handling_Tcp_Comet - Fatal编程技术网

Sockets 记录TCP可能的错误/不可预测的行为

Sockets 记录TCP可能的错误/不可预测的行为,sockets,networking,exception-handling,tcp,comet,Sockets,Networking,Exception Handling,Tcp,Comet,一段时间前,我开始使用定制服务器,尽管我有处理客户机/服务器通信的实际消息交换/序列化等方面的经验,但我从未从零开始编写实际服务器的代码。 从这个意义上说,我发现原始TCP套接字连接比我想象的要复杂得多,也不可预测 例如,我编写了一个简单的客户机/服务器应用程序,它将建立一个长寿命的TCP连接,客户机将从服务器接收推送通知。非常简单,它在我的测试环境中运行得非常好,即使有很多计算机 然而,当我真的发表这篇文章时,我遇到了很多错误,后来我发现是因为缺少keepalive信号,这会导致连接被切断,而

一段时间前,我开始使用定制服务器,尽管我有处理客户机/服务器通信的实际消息交换/序列化等方面的经验,但我从未从零开始编写实际服务器的代码。 从这个意义上说,我发现原始TCP套接字连接比我想象的要复杂得多,也不可预测

例如,我编写了一个简单的客户机/服务器应用程序,它将建立一个长寿命的TCP连接,客户机将从服务器接收推送通知。非常简单,它在我的测试环境中运行得非常好,即使有很多计算机

然而,当我真的发表这篇文章时,我遇到了很多错误,后来我发现是因为缺少keepalive信号,这会导致连接被切断,而不会给我任何客户机或服务器反馈/错误。消息根本不会被传递,并且会无声地失败

我知道TCP可能会中断连接,但我想我至少可以收到一个错误或类似的消息,以便在连接丢失的情况下重新连接。 这使我对运行自己的服务器感到非常不安全,因为可能出现的错误和场景似乎太多且出乎意料,我真的不想了解实际应用程序部署时的意外行为。根据我目前在服务器端编程方面的经验,处理错误的最佳方法是列举所有可能的错误,并确保在编写程序时涵盖所有例外情况

那么,我是否可以在任何地方找到关于套接字可能存在的陷阱/异常的好文档,以及如何检测它们?我上次使用它已经有一段时间了,所以我没有任何新的例子,但我记得,例如,当你收到一条空消息时,这意味着连接中断

我也很想听到一些建议,或者更喜欢用C语言编写的简单的lib来涵盖它们,这样我就可以把我的工作建立在它的基础上了?我的主要平台是linux,但非常感谢跨平台解决方案


谢谢大家!

这就是消息传递中间件存在的原因,请查看消息队列和非消息队列的过多情况。哇,这是一个相当繁重的实现0mq。700KB的源代码!我想要一个简单得多的解决方案,所以我只能处理可能发生的错误。我仍然希望能够使用原始TCP,例如,能够发送/接收HTTP请求-comet风格。这是一种轻量级、重量级的服务,IBM的WebSphere MQ几乎有700MB。好吧,对我来说,我只希望有一份清晰的文档,说明TCP连接可能存在的陷阱,这样我就可以注意它们了!毕竟,0mq看起来不错,但我仍然希望能够使用原始TCP,并根据需要添加功能。这可能也是相关的: