背景:

写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 进行编译

posted on 2023-05-07 15:11  30斤大番薯  阅读(192)  评论(0)    收藏  举报