golang--类似mochiweb的多进程监听tcp链接

golang--类似mochiweb的多进程监听tcp链接,第1张

概述用Erlang开发web,很可能就会使用到mochiweb。mochiweb使用16个Erlang式的进程监听tcp链接,使得任何链接进来都会很快得到处理。Golang跟Erlang很像,在这里实现了一个类似mochiweb的tcp监控链接,一个简单的echo服务器。先看代码。 1 package main 2 3 import ( 4 "log" 5 "runt

用Erlang开发web,很可能就会使用到mochiweb。mochiweb使用16个Erlang式的进程来监听tcp链接,使得任何链接进来都会很快得到处理。Golang跟Erlang很像,在这里实现了一个类似mochiweb的tcp监控链接,一个简单的echo服务器。先看代码。

 1 package main  2  3 import (  4     "log" 5     "runtime" 6     "net" 7 )  8  9 func main() { 10 11     tcpAddr,err := net.ResolveTCPAddr("tcp",":9988") 12  check_error(err) 13     tcpListener,err := net.ListenTCP("tcp",tcpAddr) 14  check_error(err) 15     for i := 0; i < 100; i++ { 16  go handle_tcp_accept(tcpListener) 17  } 18 19     select {} 20 } 21 22 23 24 func handle_tcp_accept(tcpListener *net.TCPListener) { 25     for { 26         tcpConn,err := tcpListener.AcceptTCP() 27         if err != nil { 28             log.Println("tcp accept Failed!") 29             continue30         } else { 31             connChan := make(chan []byte) 32  go write_tcp_conn(tcpConn,connChan) 33  go read_tcp_conn(tcpConn,connChan) 34  } 35  } 36 37 } 38 39 40 func read_tcp_conn(tcpConn *net.TCPConn,connChan chan []byte) { 41     buffer := make([]byte,2048) 42     tcpConn.SetReadBuffer(2048) 43     for { 44         n,err := tcpConn.Read(buffer[0:]) 45         if err != nil { 46             log.Println("one tcp connection read function Failed!") 47             log.Println("one tcp connection close Now!") 48  tcpConn.Close() 49  runtime.Goexit() 50         } else { 51             connChan <- buffer[0 : n-1] 52  } 53  } 54 } 55 56 func write_tcp_conn(tcpConn *net.TCPConn,connChan chan []byte) { 57     for { 58         msg := <-connChan 59         log.Println(string(msg)) 60         tcpConn.Write([]byte(msg)[0 : len(msg)+1]) 61  } 62 } 63 64 65 66 67 func check_error(err error) { 68     if err != nil { 69         log.Printf("Fatal error : %s",err.Error()) 70  } 71 72 }

上面代码保存为multi_thread_echo.go,使用gotool编译

go build multi_thread_echo.go

上面代码使用了100个goroutine来监听TCP链接,每个链接进来,都会新建2个goroutine,一个read,一个write。下面看看效果图:

参考:

1.Golang Away: TCP Chat Server

http://www.badgerr.co.uk/2011/06/20/golang-away-tcp-chat-server/

2.Network programming with Go

http://jan.newmarch.name/go/

转贴请注明来自:格通

总结

以上是内存溢出为你收集整理的golang--类似mochiweb的多进程监听tcp链接全部内容,希望文章能够帮你解决golang--类似mochiweb的多进程监听tcp链接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1285530.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存