背景:
写1个程序,分别使用不同的配置,在1台机上起2个不同的进程,提供不同的服务。启动后发现问题,2个http服务,只有1个能正常访问,另外1个浏览器访问就一直在等待。使用netstat 发现2个http监听端口都正常为LISTEN状态
怀疑:2个程序有共享资源在争抢
分析:netstat -anp|grep LISTEN分析,发现2个进程随机有1个进程增加监听了8843端口
检查libhv发现,如果server不指定https_port,则默认使用https_port=8843
由于编译时,使用了cmake .. -DWITH_OPENSSL=ON 参数,启用了https服务,因此2个进程启动时同时争抢8843端口,只有其中1个争抢成功,导致只有1个http服务正常
解决方法1:
在libhv启动代码中增加:
server.https_port = 0;//禁用https ,否则日内和日间两个进程会因为端口抢占,只有1个能正常对外
解决方法2:
如果根本不需要libhv使用https服务,直接在编译时禁用
cmake .. -DWITH_OPENSSL=OFF 进行编译