草庐IT

socket_handle

全部标签

戈朗 : how to handle blocking tasks optimally?

众所周知,goroutine是同步但非阻塞的处理单元。golang调度程序处理非阻塞任务,例如来自字符设备的套接字、定时器、信号或其他事件非常好。但是block设备io或CPU敏感任务怎么样?它们在完成之前不能被打断,也不能被多路复用。运行goroutine的OS线程将卡住,直到goroutine返回或让步。在这种情况下,调度粒度会变差。当然,您可以在代码中将任务拆分为更小的子任务,例如,不要一次复制1GB的文件,而是先复制10MB,让出,再复制另外10MB等,这样同一操作系统线程中的其他goroutines有机会运行。CPU密集型任务的另一个示例:逐个压缩文件并最终合并它们。但这破坏

sockets - 将 net.Conn.Read 用于持久 TCP 套接字的正确方法是什么

我的Go服务器上有一个有效的TCP套接字设置。我接受传入连接,运行for循环并使用net.Conn.Read函数读取传入数据。但这对我来说没有意义。它如何知道已收到完整消息以便继续返回消息大小?这是我目前的代码:func(tcpSocket*TCPServer)HandleConnection(connnet.Conn){println("Handlingconnection!",conn.RemoteAddr().String(),"connected!")recieveBuffer:=make([]byte,50)//largestmessageweevergetis50bytes

http - 服务器启动后如何更改 http.Handle() 中的处理程序?

我在Go中使用socketio"github.com/googollee/go-socket.io"。出于某种原因,我必须制作一个新的*socketio.server并将其注册到"/static/",它已经在旧的*socketio.server上注册了。这意味着我必须在服务器启动后替换http.Handle("/socket.io/",ioserver)中的处理程序ioserver。下面是我的部分代码,当有事情发生时,我会创建一个新的ioserver。我希望新的ioserver成为http.Handle("/socket.io/",ioserver)中的处理程序ioserver,_=s

sockets - 在 Golang 中限制 tcp 下载速度

我希望能够在我的代码中限制TCP连接的带宽。This问题有一些线索,但不完全是我想要的。我曾尝试使用类似的方法破解go标准库(net/tcp包)的src代码,但失败了。我的主要想法是以某种方式将数据从系统调用缓慢写入内部缓冲区,从而使操作系统丢弃tcp数据包。 最佳答案 如评论中所述,最简单的方法是使用wondershaper工具在操作系统级别执行此操作。如果您查看“wondershaper”'脚本,它使用来自'iproute2的'/sbin/tc'命令'包裹。我知道这并不是您想要做的,但是您可以通过使用os.exec()在源代码中

sockets - 通过 udp 套接字发送 float32 值

我正在做一个Go项目,我想使用UDPSocket发送float32值。我不明白的是,在发送这些数字之前将它们转换为字节缓冲区的最佳方法是什么,以及如何在接收到它们后将它们转换回float32。目前我正在使用我在网上找到的以下函数转换float32->[]byte,但我什至不确定我是否得到了我想要的:funcFloat32bytes(floatfloat32)[]byte{bits:=math.Float32bits(float)bytes:=make([]byte,4)binary.LittleEndian.PutUint32(bytes,bits)returnbytes}我仍然不知道

sockets - Go 中的网络编程有哪些选项?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion我希望使用TCP套接字编写一个简单的客户端/服务器。有关于如何使用Go进行网络编程的想法吗?

error-handling - 在 Go 中处理连接重置错误

在普通的GoHTTP处理程序上,如果我断开客户端连接同时仍在写入响应,http.ResponseWritter.Write将返回一个错误消息,如writetcp127.0.0.1:60702:连接被对等方重置。现在从syscall包中,我有sysca.ECONNRESET,它有消息connectionresetbypeer,所以它们不是完全一样。我怎样才能匹配它们,所以我知道如果它发生了不要panic?在其他场合我一直在做iferr==syscall.EAGAIN{/*handleerrordifferently*/}例如,它运行良好,但我无法使用syscall.ECONNRESET实

sockets - golang net.UDPConn 和 net.TCPConn 线程安全吗??我可以在多线程中读取或写入单个 UDPConn 对象吗?

1.我们能否在同一个net.UDPConn或net.TCPConn对象上从一个线程调用发送并从另一个线程调用接收?2.我们能否从同一net.UDPConn或net.TCPConn对象上的不同线程并行调用多个发送?我也找不到同样好的文档。golangsocketapi线程安全吗?我发现很难测试它是否是线程安全的。方向上的任何指示都会有所帮助。我的测试代码如下:packagemainimport("fmt""net""sync")funcudp_server(){//createlistenconn,err:=net.ListenUDP("udp",&net.UDPAddr{IP:net.

websocket - http.Handle ("/", websocket.Handler(EchoServer) EchoServer 可以获取ws以外的其他参数吗?

我已经打开了一个websocket服务器来向web组件发送数据,funcWebSocketServer(){http.Handle("/",websocket.Handler(Echoserver))err:=http.ListenAndServe(":8081",nil)CheckError(err)}我想将一个额外的参数(msg,字符串类型)传递给处理函数(Echoserver)。funcEchoserver(ws*websocket.Conn,msgString){fmt.Println("ClientConnected")_:=websocket.JSON.Send(ws,ms

sockets - Go语言如何创建客户端?

我是新来的,我试图用go语言准备客户端服务器并尝试编写代码,但它没有给出任何输出。它不会给出任何错误,只是在倾听。请有人帮助我,我想使用go创建身份验证系统,其中服务器使用用户名密码对客户端进行身份验证..服务器:packagemainimport("fmt""net")funcmain(){service:="0.0.0.0:8080"tcpAddr,err:=net.ResolveTCPAddr("tcp",service)checkError(err)listener,err:=net.ListenTCP("tcp",tcpAddr)checkError(err)for{conn