Comments (13)
关闭服务端是指结束server进程吗?如果server端进程结束了,client端和server端的连接不应当还处于ESTABLISHED状态。所以我没有太理解你的意思,你能说得更明白些吗?
from sofa-pbrpc.
是的,是直接结束server端进程后,发现client端和服务端的连接还处于ESTABLISHED状态,导致服务端再重启的时候提示 Address already in use
from sofa-pbrpc.
我自己测试:首先让client和server端正常通信,然后直接结束server端进程,发现client端进程中其与server端的连接会立即关闭并打印日志,同时通过netstat查看会发现连接由ESTABLISHED状态变为了TIME_WAIT状态。
请问你是用的最新版本测试的吗?
from sofa-pbrpc.
不是最新版的,我试试最新版的看看
from sofa-pbrpc.
@panshiming 好的,你去试试,我记得有修复过这个问题的,在RpcByteStream::close()里面有这样一行:
_socket.shutdown(tcp::socket::shutdown_both, ec);
from sofa-pbrpc.
@qinzuoyan 刚才下最小版本 用sample里的echo测试 client_sync改成死循环发送 关掉server进程->开启server进程 多试几次 client还是会出现当server关掉后仍然处于 ESTABLISHED状态
from sofa-pbrpc.
很奇怪,我这里没法重现,你的系统环境是?
from sofa-pbrpc.
Linux SMP Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux ,感觉服务端关掉后客户端不能立即感应到,不知道是不是和asio机制有关系
from sofa-pbrpc.
[rd@idc01-solr-test-01 echo]$ ./server
libsofa_pbrpc INFO src/sofa/pbrpc/rpc_server_impl.cc:64] RpcServerImpl(): quota_in=-1MB/s, quota_out=-1MB/s, max_pending_buffer_size=100MB, keep_alive_time=-1seconds
libsofa_pbrpc INFO src/sofa/pbrpc/thread_group_impl.h:104] start(): starting thread group [sofa_pbrpc_server_maintain_thread_group], thread_num=1
libsofa_pbrpc INFO src/sofa/pbrpc/thread_group_impl.h:167] start(): thread group [sofa_pbrpc_server_maintain_thread_group] started, thread_num=1
libsofa_pbrpc INFO src/sofa/pbrpc/thread_group_impl.h:104] start(): starting thread group [io_service worker thread], thread_num=8
libsofa_pbrpc INFO server.cc:35] Init work thread succeed
libsofa_pbrpc INFO server.cc:35] Init work thread succeed
libsofa_pbrpc INFO server.cc:35] Init work thread succeed
libsofa_pbrpc INFO server.cc:35] Init work thread succeed
libsofa_pbrpc INFO server.cc:35] Init work thread succeed
libsofa_pbrpc INFO server.cc:35] Init work thread succeed
libsofa_pbrpc INFO server.cc:35] Init work thread succeed
libsofa_pbrpc INFO server.cc:35] Init work thread succeed
libsofa_pbrpc INFO src/sofa/pbrpc/thread_group_impl.h:167] start(): thread group [io_service worker thread] started, thread_num=8
libsofa_pbrpc ERROR src/sofa/pbrpc/rpc_listener.h:146] start_listen(): bind acceptor failed: 0.0.0.0:12321: Address already in use
libsofa_pbrpc ERROR src/sofa/pbrpc/rpc_server_impl.cc:141] Start(): listen failed: 0.0.0.0:12321
libsofa_pbrpc INFO server.cc:41] Destroy work thread succeed
libsofa_pbrpc INFO server.cc:41] Destroy work thread succeed
libsofa_pbrpc INFO server.cc:41] Destroy work thread succeed
libsofa_pbrpc INFO server.cc:41] Destroy work thread succeed
libsofa_pbrpc INFO server.cc:41] Destroy work thread succeed
libsofa_pbrpc INFO server.cc:41] Destroy work thread succeed
libsofa_pbrpc INFO server.cc:41] Destroy work thread succeed
libsofa_pbrpc INFO server.cc:41] Destroy work thread succeed
libsofa_pbrpc INFO src/sofa/pbrpc/thread_group_impl.h:201] stop(): thread group [io_service worker thread] stopped
libsofa_pbrpc INFO src/sofa/pbrpc/thread_group_impl.h:201] stop(): thread group [sofa_pbrpc_server_maintain_thread_group] stopped
我机器上有一个客户端不停往12321端口发数据 这个时候按道理不应该影响server的启动的
from sofa-pbrpc.
你确定原来的server进程已经退出了?
from sofa-pbrpc.
嗯 确定 因为我是在前台运行的
from sofa-pbrpc.
真的奇怪了,你找一台不一样的机器试试,看是否也有这个问题呢?
from sofa-pbrpc.
@panshiming 应该是和boost版本有关系,你可以检查下你是不是用的boost 1.54.0
boost bug 8795
如果是这个版本的话,connect会一直返回成功,即使对端并不存在的情况下。
所以在你用死循环去大量发送请求到本地server的时候,极有可能client会使用12321端口去尝试连接server,而这时即使没启动server,rpc由于asio的bug也会导致判定连接成功,进而client在这个连接上尝试读写,这时在client这边看连接状态就是ESTABLISTHED,server因为端口被占用,所以无法启动
复现的话,你可以只启动一个死循环的client,不必启server,然后观察连接状态
可以通过升级boost解决,我本地用的boost版本1.56.0
from sofa-pbrpc.
Related Issues (20)
- sofa-server端耗时异常
- sofa-client请求超时之后不关闭tcp连接导致同一个连接上请求连续超时 HOT 1
- try_start_receive是否可以省略_receive_token
- RpcServerMessageStream和RpcMessageStream类是否可抽取公共父类
- boost async_write_some可否用async_write替换 HOT 1
- sofa-pbrpc 需要引入可配置参数
- 客户端超时设置 HOT 2
- sofa-pbrpc-client health超时
- Too many threads in sofa ,how use epoll to overlap large number of socket events HOT 2
- sofa使用snapy压缩请求体大小为100+K时解压缩出错 HOT 5
- GOOGLE_ATTRIBUTE_DEPRECATED 替换成 __attribute__((deprecated)) HOT 2
- 什么时候支持window? HOT 2
- CPU使用问题 HOT 3
- 内存问题 HOT 2
- server如何主动向client发送消息? HOT 1
- bugs on weak memory model arch.(arm/power)
- server端如何主动发消息?
- 关于volatile变量相关的问题
- 有没有这种服务互相调用的方法
- cross compile error
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sofa-pbrpc.