Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持UNIX Domain socket #1561

Closed
bystorm opened this issue Sep 16, 2021 · 7 comments
Closed

支持UNIX Domain socket #1561

bystorm opened this issue Sep 16, 2021 · 7 comments

Comments

@bystorm
Copy link

bystorm commented Sep 16, 2021

Is your feature request related to a problem? (你需要的功能是否与某个问题有关?)

Describe the solution you'd like (描述你期望的解决方法)
支持UNIX domain socket 以更好的支持进程间通信。
UNIX domain socket采用共享内存技术,在单机中的进程间通信有着更好的性能。
Describe alternatives you've considered (描述你想到的折衷方案)

Additional context/screenshots (更多上下文/截图)

@wwbmmm
Copy link
Contributor

wwbmmm commented Sep 17, 2021

#1560 已经在PR中了

@bystorm
Copy link
Author

bystorm commented Oct 8, 2021

试用了1560提交的那个版本的uds,发现两个问题:1. 如果客户端先启动,服务端后期动,客户端无法连接到服务端。2. 服务端生成sock文件如果不删除,会bind失败。

@wwbmmm
Copy link
Contributor

wwbmmm commented Oct 8, 2021

试用了1560提交的那个版本的uds,发现两个问题:1. 如果客户端先启动,服务端后期动,客户端无法连接到服务端。2. 服务端生成sock文件如果不删除,会bind失败。

  1. 我试了下,如果客户端先启动,服务端后启动,客户端会在服务端启动3秒后连接到服务端。不知道你具体是怎么操作的?
  2. 可以设置gflag reuse_uds_path=true,这样就会自动删除sock文件

@bystorm
Copy link
Author

bystorm commented Oct 8, 2021

我就是先启动client,然后再启动server。之后就一直连不上了。
error=[E112]Not connected to unix:local_cache.sock yet, server_id=0 [R1][E112]Not connected to unix:local_cache.sock yet, server_id=0
我看了example中的确实可以重新连接,连不上的时候错误码不同。
src/brpc/socket.cpp:1136] Fail to connect to unix:1.sock: Connection refused
Fail to connect to unix:1.sock: No such file or directory

@wwbmmm
Copy link
Contributor

wwbmmm commented Oct 8, 2021

我就是先启动client,然后再启动server。之后就一直连不上了。 error=[E112]Not connected to unix:local_cache.sock yet, server_id=0 [R1][E112]Not connected to unix:local_cache.sock yet, server_id=0 我看了example中的确实可以重新连接,连不上的时候错误码不同。 src/brpc/socket.cpp:1136] Fail to connect to unix:1.sock: Connection refused Fail to connect to unix:1.sock: No such file or directory

Connection refused的情况应该是sock文件存在,但是没有进程在监听
No such file or directory的情况是sock文件不存在
我就是用的example/echo_c++,先启动client,一开始打的是: [E112]Not connected to unix:path.sock yet, server_id=0 [R1][E112]Not connected to unix:path.sock yet, server_id=0 [R2][E112]Not connected to unix:path.sock yet, server_id=0 [R3][E112]Not connected to unix:path.sock yet, server_id=0
每3秒会探活一次,打印一条:Fail to connect to unix:path.sock: No such file or directory
再启动server,下一次探活就会出现:Revived Socket{id=0 addr=unix:path.sock} (0x55ecd5810050) (Connectable)
然后就正常了

@bystorm
Copy link
Author

bystorm commented Nov 2, 2021

客户端的connection_type采用pooled方式,当启动多个客户端进程时,会打印:
W1102 12:55:20.049485 2285291 src/brpc/socket.cpp:1136] Fail to connect to unix:/etc/local_cache/local_cache.sock: Resource temporarily unavailable
W1102 12:55:20.049553 2285292 src/brpc/socket.cpp:1136] Fail to connect to unix:/etc/local_cache/local_cache.sock: Resource temporarily unavailable
W1102 12:55:20.049557 2285291 src/brpc/socket.cpp:1136] Fail to connect to unix:/etc/local_cache/local_cache.sock: Resource temporarily unavailable
W1102 12:55:20.049775 2285291 src/brpc/socket.cpp:1136] Fail to connect to unix:/etc/local_cache/local_cache.sock: Resource temporarily unavailable
W1102 12:55:20.049793 2285292 src/brpc/socket.cpp:1136] Fail to connect to unix:/etc/local_cache/local_cache.sock: Resource temporarily unavailable
W1102 12:55:20.049897 2285292 src/brpc/socket.cpp:1136] Fail to connect to unix:/etc/local_cache/local_cache.sock: Resource temporarily unavailable
W1102 12:55:20.049926 2285292 src/brpc/socket.cpp:1136] Fail to connect to unix:/etc/local_cache/local_cache.sock: Resource temporarily unavailable
导致连不上,是不是一个uds的fd有限制。

@wwbmmm
Copy link
Contributor

wwbmmm commented Mar 28, 2022

已合入master

@wwbmmm wwbmmm closed this as completed Mar 28, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants