重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
读取配置文件并启动,在配置文件中设置的监听端口监听客户端请求。
创新互联-专业网站定制、快速模板网站建设、高性价比丽水网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式丽水网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖丽水地区。费用合理售后完善,十余年实体公司更值得信赖。
收到客户端连接请求后,启动一个goroutine单独处理该请求。
首选进行登录验证,验证过程完全兼容MySQL认证协议,由于用户名和密码在配置文件中已经设置好,所以可以利用该信息验证连接请求是否合法。
当用户名和密码都正确时,转入下面的步骤,否则返回出错信息给客户端。
认证通过后,客户端发送SQL语句。
kingshard对客户端发送过来的SQL语句,进行词法和语义分析,识别出SQL的类型和生成SQL的路由计划。如果有必要还会改写SQL,然后转发到相应的DB。也有可能不做词法和语义分析直接转发到相应的后端DB。如果转发SQL是分表且跨多个DB,则每个DB对应启动一个goroutine发送SQL和接收该DB返回的结果。
接收并合并结果,然后转发给客户端。
func main() {
m := martini.Classic()
m.Get("/device/:serialnumber" , func(params martini.Params) string {
detail := GetDeviceState(params["serialnumber"])
result , _ := json.Marshal(detail)
return string(result)
})
m.Get("/device/ctrl/:serialnumber/:state" , func(params martini.Params) string {
detail := DeviceStateUpdate(params["serialnumber"] , params["state"])
result , _ := json.Marshal(detail)
return string(result)
})
由于linux的socket监听机制和TCP协议,多个进程无法监听同一个端口,但是具体到nginx,可以多个nginx进程监听到不同端口,通过一个主进程端口做upstream来实现负载均衡,这个有点类似于网络的汇聚,可以设置不同的策略,比如iphash,urlhash或者RR。
1、首先使用一个公共的端口作为监听,让HTTP和HTTPS服务分别监听在各自的端口上。
2、其次在公共端口服务区分这是HTTP请求还是HTTPS请求。
3、最后各自转发到所服务的监听即可。