HTML5客户端
先上H5
客户端的代码
注意我们这里的服务端连接地址为:ws://127.0.0.1:8199/ws
。
客户端的功能很简单,主要实现了这几个功能:
- 与服务端
websocket
连接状态保持及信息展示; - 界面输入内容并发送信息到
websocket
服务端;
WebSocket服务端
- WebSocket方法
websocket
服务端的路由注册方式和普通的http
回调函数注册方式一样,但是在接口处理中我们需要通过ghttp.Request.WebSocket
方法(这里直接使用指针对象r.WebSocket()
)将请求转换为操作,并返回一个WebSocket对象
,该对象用于后续的websocket
通信操作。当然,如果客户端请求并非为websocket
操作时,转换将会失败,该方法会返回错误信息,使用时请注意判断方法的error
返回值。
- ReadMessage & WriteMessage
读取消息以及写入消息对应的是websocket
的数据读取以及写入操作(ReadMessage & WriteMessage
),需要注意的是这两个方法都有一个msgType
的变量,表示请求读取及写入数据的类型,常见的两种数据类型为:字符串数据或者二进制数据。在使用过程中,由于接口双方都会约定统一的数据格式,因此读取和写入的msgType
几乎都是一致的,所以在本示例中的返回消息时,数据类型参数直接使用的是读取到的msgType
。
HTTPS的WebSocket
如果需要支持HTTPS
的WebSocket
服务,只需要依赖的WebServer
支持HTTPS
即可,访问的地址需要使用 wss://
协议访问。以上客户端HTML5
页面中的WebSocket
访问地址需要修改为:wss://127.0.0.1:8199/wss
。服务端示例代码:
示例结果展示
Websocket安全校验
GoFrame
框架的websocket
模块并不会做同源检查(origin
),也就是说,这种条件下的websocket允许完全跨域。
安全的校验需要由业务层来处理,安全校验主要包含以下几个方面:
origin
的校验: 业务层在执行r.WebSocket()
之前需要进行origin
同源请求的校验;或者按照自定义的处理对请求进行校验(如果请求提交参数);如果未通过校验,那么调用r.Exit()
终止请求。