Go语言_net篇
這篇想閱讀的是go的net包,net包提供了各種網(wǎng)絡IO類型,比如有TCP/IP, UDP, 域名解析, Unix domain socket
使用這個包能很容易發(fā)送一個tcp請求,創(chuàng)建服務器也再也不需要像C語言那樣createSocket等一系列繁瑣的操作了,用起來那感覺不是一般地爽啊!
?
下面先創(chuàng)建一個簡單的Server端:
package main
?
import (
??? "net"
??? "fmt"
)
?
func main() {
??? if ln, err := net.Listen("tcp", ":8080"); err == nil {
??????? defer ln.Close()
??????? for{
??????????? ln.Accept()
??????????? fmt.Println("Receive a Message")
??????? }
??? }???
}
?
和腳本一樣簡單的寫法。
先net.Listen(), 第一個參數(shù)是協(xié)議,tcp還是udp,第二個參數(shù)是ip地址,這里可以不填寫IP只填寫端口就是
使用defer 來Close,將close寫在listen之后是個好習慣
然后再循環(huán)中使用Accept()接受消息
?
?
?
下面是一個可以進行壓力測試的客戶端程序
package main
?
import (
??? "net"
??? "fmt"
)
?
func main() {
??? currency := 20 //并發(fā)數(shù),記住,一個連接數(shù)是打開一個端口號,window和linux的端口號都是有限制的
??? count := 10 //每條連接發(fā)送多少次連接
??? for i:=0;i<currency;i++ {
??????? go func(){
??????????? for j:=0;j<count;j++ {
??????????????? sendMessage()
??????????? }
??????? }()
??? }
??? select{}
}
?
func sendMessage() {
??? conn, err := net.Dial("tcp", "127.0.0.1:8080")
??? if(err != nil) {
??????? panic("error")
??? }
??? header := "GET / HTTP/1.0\r\n\r\n"
??? fmt.Fprintf(conn, header)
}
總結
- 上一篇: linux系统增加swap分区
- 下一篇: linux查看内核版本、系统版本、系统位