//功能簡介
/*2.改名功能 輸入rename|newname 可以更改自己的暱稱
4.聊天功能, 任一連線成員, 傳送訊息, 廣播所有使用者, 類似於群聊
5.超時自動退出
*/package main
import
("fmt"
"net"
"strings"
"time"
)// 線上使用者結構體
type client struct
func
clienthandler
(conn net.conn)
onliemap[remoteaddr]
= client
//向當前使用者傳送訊息
gowritemsgtoclient
(client, conn)
//廣播使用者上線
message <-
makemsg
(client,
"login success"
) conn.
write([
]byte
(makemsg
(client,
"i am here"))
) clientexit :=
make
(chan
bool
) hasdata :=
make
(chan
bool
)//監聽使用者訊息
gofunc()
msg :=
string
(buf[
:n-1])
if msg ==
"who"
}else
iflen
(msg)
>=
6&& msg[:6
]=="rename"
else
hasdata <-
true}}
()timer := time.
newtimer
(time.second *30)
for}
}var message chan
string
=make
(chan
string
)// **的訊息
var onliemap map
[string
// 組裝訊息
func
makemsg
(client client, msg string
)string
// 傳送訊息給客戶端
func
writemsgtoclient
(client client, conn net.conn)}}
// 廣播訊息
func
manage()
}}func
main()
defer listen.
close()
gomanage()
//監聽使用者訊息, **
for// 使用者處理
goclienthandler
(conn)
}}
golang實現簡易多人聊天伺服器
伺服器端server.go 如下 package main import fmt net var connmap map string net.tcpconn 客戶端ip到conn 接收連線 的對映 func checkerr err error int fmt.println 發生錯誤 retur...
後台伺服器經典面試題
1,使用linux epoll模型,水平觸發模式 level triggered 當socket可寫時,會不停的觸發socket可寫的事件,如何處理?2,從socket讀資料時,socket快取裡的資料,可能超過使用者快取的長度,如何處理?例如,socket快取有8kb的資料,而你的快取只有2kb空...
騰訊後台伺服器面試題總結
提問 不按時間順序 1,使用linux epoll模型,水平觸發模式 level triggered 當socket可寫時,會不停的觸發socket可寫的事件,如何處理?2,從socket讀資料時,socket快取裡的資料,可能超過使用者快取的長度,如何處理?例如,socket快取有8kb的資料,而...