我使用 WebSocket API 创建了我的个人项目,
当我从 w3c 阅读 WebSocket Spec 时,我想到了一件事。
为什么 WebSockets 使用握手来连接服务器?
我不能尝试使用套接字直接连接到服务器?
谢谢,祝你有美好的一天!
你的问题不是很精确,但我想我知道你要去哪里。如果我错了,请纠正我。
新事物是:通过使用 WebSocket Upgrade 标头(在“握手”中),您可以使用对端口 80 的普通 HTTP 请求调用与服务器的低延迟双向连接。然后全双工连接开始通过服务器:80。
我不能尝试使用套接字直接连接到服务器?
你的意思是普通的TCP套接字?你总是可以尝试,你可以尝试任何端口,任何协议,但你想实现什么?如果您知道与 server:80 的 HTTP 连接可以升级为 WebSocket 连接,您可以自己编写相应的客户端,从普通的 TCP 套接字开始。但是,由于您已经知道要连接到 WebSocket 服务器,因此您应该使用现代浏览器提供的已建立的 WebSocket 客户端。
握手允许 WebSocket 连接与正常的 HTTP(S) 流量一起使用,也可以在相同的端口上使用。握手的另一个目的是强制执行 CORS(跨域)安全策略。
握手并不是阻止 WebSocket 连接与普通 TCP 服务器一起使用的唯一因素。WebSocket 协议的每个数据帧都有前导头数据。这允许 WebSockets 成为基于消息的协议(而不是像 TCP 那样的原始流),并增加了对直接二进制数据支持的支持,还包括屏蔽数据(以保护 WebSocket 连接免受损坏的中介。
如果您需要从浏览器连接到原始 TCP 服务,则可以使用websockify,它是一个 WebSocket 到 TCP 桥/代理。免责声明:我制作了 websockify。