golang實現聊天後台伺服器

2021-10-05 17:36:56 字數 1602 閱讀 3004

//功能簡介

/*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的資料,而...