Posted on 2014-02-28 16:49:03 network
在此博客运行的云主机上,使用SMTP客户端发送邮件到国内的SMTP服务器,报如下错误:
2014/02/28 16:17:29 551 User not local; please try <forward-path>
说明:这个错误和邮件内容、标题等完全没有关系,而是GFW的原因。Google到如下答案:
中国政府的国家防火墙(GFW,又名`金盾工程`)做了过滤的原因,它(金盾工程)定义了大陆的IP连接到大陆以外(如香港、台湾、欧洲等)的邮件服务器是不可以自己发邮件给自己的!只要大陆所在客户端用大陆的IP发送邮件,马上就会提示551 User not local; please try这样的错误信息!
本人实际遇到的问题,是在国外的主机上使用大陆的邮件服务器,发送邮件给自己。应该也是GFW在作怪。
解决办法有两个:
在使用了Gmail的SMTP服务器发送邮件到QQ的SMTP邮件服务器之后,错误不再出现。
Posted on 2014-02-22 07:59:54 network
摘要:我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉:
1. TCP/IP协议(如连接的建立和终止、重传和确认、滑动窗口和拥塞控制等等)
2. Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为。
3. 编写Performant, Scalable的服务器程序。包括多线程、IO Multiplexing、非阻塞、异步等各种技术。
关于TCP/IP协议,建议参考Richard Stevens的《TCP/IP Illustrated,vol1》(TCP/IP详解卷1)。
关于第二层面,依然建议Richard Stevens的《Unix network proggramming,vol1》(Unix网络编程卷1),这两本书公认是Unix网络编程的圣经。
至于第三个层面,UNP的书中有所提及,也有著名的C10K问题,业界也有各种各样的框架和解决方案,本人才疏学浅,在这里就不一一敷述。
本文的重点在于第二个层面,主要总结一下Linux下TCP/IP网络编程中的read/write系统调用的行为,知识来源于自己网络编程的粗浅经验和对《Unix网络编程卷1》相关章节的总结。由于本人接触Linux下网络编程时间不长,错误和疏漏再所难免,望看官不吝赐教。
阅读全文Posted on 2013-03-07 19:03:17 network
最近在折腾一个长连接HTTP服务器的时候,积累了一些经验,下面总结出来:
最好使用支持HTTP/1.1的服务器,HTTP/1.1默认支持keep-alive,不需要像HTTP/1.0那样检测Connection: keep-alive.
浏览器的刷新也会断开长连接,如果在服务端有一些判断,要注意发生重复的可能。
在用户关闭浏览器的标签的时候,如果有多个页面和服务器保持长连接,服务器应检测对应的页面,并做清理。
将长连接服务器位于反向代理之后,应在反向代理服务器上设置保持keep-alive,如nginx。 这样可显著减少后端upstream服务器的压力。
检测用户刷新页面,如果刷新应询问用户是否真的刷新。这样可以减少一些误判断。 如WEBQQ在检测到用户刷新时,对应的动作是重新登录。 这样做是很好,可以预防用户在当前页面重复触发一些业务逻辑。
如因为业务需要将长连接和会话绑定(很多WEB IM都这样做),应注意清理服务端保持的长连接。 发送完消息,就应该删除这个长连接。因为浏览器ajax请求还会立即请求的。