如何在Golang中编写一个使用poll或epoll的服务器?

huangapple go评论97阅读模式
英文:

How can write a poll or epoll server in Golang?

问题

在Golang中,如果我们想要编写一个socket服务器,可以像这样编写:

listen, err := net.Listen("tcp", "****")
for {
    conn, err := listen.Accept()
    ...
}

net.Listen() 包括创建 socketbindlisten 操作,并在实现中使用了 epoll

在C++中,如果我们想要编写一个服务器,可以自由选择使用 selectpollepoll,所以我的问题是:在Golang中,如何使用 selectpoll 而不是 epoll 来编写服务器。

英文:

In Golang, if we want to write a socket server, we can write like this :

listen, err := net.Listen("tcp", "****")
for {
    conn, err := listen.Accept()
    ...
}

net.Listen() include create socket, bind, listen, and uses epoll in implementation.

in CPP, if we want to write a server, we can chose to use select, poll or epoll freely , so my question is: in Golang, how can I write a server using select or poll instead of `epoll.

答案1

得分: 1

如果你熟悉连接创建过程中使用的系统调用,你会发现 syscalls package 对你所需的工作非常有用,你可以根据需要选择使用这些系统调用。它包含了你所需的所有系统调用。

我还找到了这个示例 gist,你可以参考它来使用 pollselect 进行自己的实现。

英文:

If you are familiar with system calls used during connection creation; you will find the syscalls package useful for what you need to do where you can choose to use these system calls as you need. It consists of all the system calls you will need.

I also found this example gist which you can reference for making your own implementation using poll or select.

huangapple
  • 本文由 发表于 2021年11月9日 13:00:23
  • 转载请务必保留本文链接:https://go.coder-hub.com/69893039.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定