# WebSocket专栏 在SD框架中,WebSocket,HTTP,TCP这3中协议都可以同时开启。 ## 须知 1.HTTP和WebSocket监听的是同一个端口,本身WebSocket就是Http协议的一中,HTTP协议通过握手转变成了WebSocket。可以在SD启动界面中看到WebSocket和HTTP端口是一致的 2.WebSocket和TCP一样是属于长连接,1个用户和SD服务器保持连接是通过fd来识别的,和TCP一样WebSocket区分客户端连接也是通过fd,那么binduid,unbinduid函数也适用于WebSocket,并且为了方便SD的Send族函数是同时适配TCP和WebSocket,通过Send族函数向一个fd发送信息时SD会自动判断连接是TCP还是WebSocket。 3.WebSocket和TCP的封装器保持一致,在函数名的体现上也保持一致。 ## 握手 默认使用自动握手,如果需要手动控制握手那么需要在AppServer中打开自定义握手 ``` class AppServer extends SwooleDistributedServer { /** * 可以在这里自定义Loader,但必须是ILoader接口 * AppServer constructor. */ public function __construct() { $this->setLoader(new Loader()); //自定义握手 $this->setCustomHandshake(true); parent::__construct(); } } ``` 这样onWebSocketHandCheck函数才生效 # 总结 在SD框架中不需要刻意区分TCP和WebSocket,可以简单的理解为WebSocket的所有特性和方法都和TCP保持一致,他们公用一套API,他们公用一套封装器。