问题内容 我正在使用 zeroMQ 和 Go 开发一个分布式系统。它就像一个分布式账本,因此您可以获取内容并追加。我有自动发出 get 和 add 请求的客户端。该程序运行良好几秒钟,
我正在使用 zeroMQ 和 Go 开发一个分布式系统。它就像一个分布式账本,因此您可以获取内容并追加。我有自动发出 get 和 add 请求的客户端。该程序运行良好几秒钟,但随后崩溃,并出现错误“panic:非套接字上的套接字操作”。
我尝试使用 debug.setGCpercent(-1) 关闭垃圾收集器,但我确信这个解决方案并不完全正确。 这是服务器初始化代码
package server
import (
"backend/config"
"backend/gset"
"backend/tools"
zmq "GitHub.com/pebbe/zmq4"
)
type server struct {
zctx *zmq.context
peers map[string]*zmq.Socket
receive_socket zmq.socket
id string
gset map[string]string
port string
my_init map[string]bool
my_echo map[string]bool
my_vote map[string]bool
peers_echo map[string]bool
peers_vote map[string]bool
}
func createserver(node config.node, peers []config.node, zctx *zmq.context) *server {
id := node.host + node.port
port := node.port
server_sockets := make(map[string]*zmq.socket)
my_gset := gset.create()
my_init := make(map[string]bool)
my_echo := make(map[string]bool)
my_vote := make(map[string]bool)
peers_echo := make(map[string]bool)
peers_vote := make(map[string]bool)
receive_socket, _ := zctx.newsocket(zmq.router)
receive_socket.bind("tcp://*:" + node.port)
tools.log(id, "bound tcp://*:"+node.port)
// connect my dealer sockets to all other servers' router
for i := 0; i < len(peers); i++ {
s, _ := zctx.newsocket(zmq.dealer)
s.setidentity(id)
s.connect("tcp://localhost:" + peers[i].port)
// append socket to socket list
server_sockets["tcp://localhost:"+peers[i].port] = s
}
return &server{
peers: server_sockets,
receive_socket: *receive_socket,
id: id,
port: port,
gset: my_gset,
my_init: my_init,
my_echo: my_echo,
my_vote: my_vote,
peers_echo: peers_echo,
peers_vote: peers_vote,
}
}
这是控制服务器的函数
func NORMal_listener_task(s *server.Server) {
for {
message, err := s.Receive_socket.RecvMessage(0)
if err != nil {
fmt.Println(zmq.AsErrno(err))
panic(err)
}
messaging.HandleMessage(s, message)
}
}
整个代码在我的 github 中
如果有人知道为什么会发生这种情况,你就会保存我的论文。谢谢
问题是我用 Receive_socket zmq.Socket
声明了 receive_socket,而它本应是 *Receive_socket zmq.Socket
。该指针只是一个副本,因此被 GC 视为垃圾。
以上就是Go 的垃圾收集器在使用时删除 ZeroMQ 套接字的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: Go 的垃圾收集器在使用时删除 ZeroMQ 套接字
本文链接: https://www.lsjlt.com/news/561073.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0