:1.389MB : :1 :2019-12-19 08:06:54
TCP服务器我是用socket API做的,反复修改多次,比较稳定,需要注意三点:
1、TCP是流套接字,虽然他的数据也是一包包发出来的,但是整个TCP数据流没有严格的包的概念,你每次recv到的,并不都是客户每次send出来的,可能recv到的数据比客户单次send的数据多,也可能少,或者一次recv接收到用户两次send的数据,因为TCP毕竟是个流,而不是块,所以判断数据是否接收完成是非常重要的一个工作,那些recv一次就收取用户所有数据的,TCP服务器简直是非常扯淡的
2、千万不要在 监听线程中使用阻塞的accept,应该用非阻塞的accept调用一下,就可以出来客户socket句柄了,然后创建线程处理这个客户,监听线程继续accept其它用户,而处理线程先调用select等待用户完成三次TCP握手,这样在大并发下不会堵塞监听线程
3、在断开客户的时候,最好是不要主动断开,在上层协yi里面叫客户主动断开你,然后你检查多少秒内客户没有断开你,你再断开他,否则如果你不通知而主动先断开客户的话,客户的电脑上的这个连接端口会进入 TIME_WAIT状态,如果他频繁访问你,最终可能导致他自己断网,后果很严重
至于HTTP协yi,其实是个超级简单的东西,唯一就是处理好transfer-encoding:chunked,以及transfer-encoding:chunked和GZIP混用的情况,纯文本或者字节集操作,对于任何易语言玩家来说都不是个问题,掌握好HTTP的请求类型,通用的协yi头代表的内容这些就足够了,在上层处理中也要注意用户的 Accept和Content-Type,以及发送给客户的cookies的所有通用属性(比如path,DOMAIN,expires等等),至于跨域的 Access-Control-Allow-Origin之类的头,如果不想做也没关系
做一个web服务器的核心在于
(1)TCP服务器的稳定性,高效性,不能因访问过大而严重堵塞,要有容灾机制,基本的防护机制,以及合理的长连接处理
(2)扩展的支持,至少支持个DLL,而不是纯粹的静态文件,所以扩展支持应该专门做一个功能,扩展作为单独的文件,就像PHP一样
(3)对目前现有扩展的支持,asp,php这些应该是必须支持的,最好是跟IIS一样,能够支持ISAPI,那样功能就强大了,目前所有的应用于IIS上的ISAPI扩展和过滤器都可以用在这个服务器上,并且,fastCGI也是一种ISAPI扩展,而php5.4版本以后都是fastCGI模式,所以搞定了ISAPI就同时搞定了多种fastCGI应用,包括PHP
(4)如果想要商业化,最好是有一套自己的脚本语言翻译机制,论坛上有很多大牛都发过类似的源码
(5)访问控制机制,安装web服务器的时候创建一个web服务器专用来宾用户
02-18易语言的自用CAD插件开源
02-17会员管理插件源码
02-16易语言打造的最简单易用的http服务框架
02-16Fiddler批量自动生成易语言代码
02-16动态创建菜单与响应事件源码,菜单编辑器
02-16易语言如何判断按钮只能在30秒内点击一次
02-16易语言助手插件快捷键添加注释功能
09-07C++的string的实现源码分析
10-21易语言学习制作的生意参谋转换工具