package main
import (
"fmt"
"net"
"time"
)
var ConnSlice map[net.Conn]*Heartbeat
type Heartbeat struct {
endTime int64 //結束時間
}
func main() {
//建立連線
ConnSlice = map[net.Conn]*Heartbeat{}
l, err := net.Listen("tcp", "127.0.0.1:8086")
if err != nil {
fmt.Println("連線失敗")
}
defer l.Close()
for {
conn, err := l.Accept()
if err != nil {
fmt.Println("Error accepting: ", err)
}
fmt.Printf("Received message %s -> %s \n", conn.RemoteAddr(), conn.LocalAddr())
ConnSlice[conn] = &Heartbeat{
endTime: time.Now().Add(time.Second * 5).Unix(), //初始化結束時間
}
go handelConn(conn)
}
}
func handelConn(c net.Conn) {
buffer := make([]byte, 1024)
for {
n, err := c.Read(buffer)
if ConnSlice[c].endTime > time.Now().Unix() {
ConnSlice[c].endTime = time.Now().Add(time.Second * 5).Unix() //更新心跳時間
} else {
fmt.Println("長時間未發訊息斷開連接")
return
}
if err != nil {
return
}
//是心跳檢查,就不繼續執行
if string(buffer[0:n]) == "1" {
c.Write([]byte("1"))
continue
}
for conn, heart := range ConnSlice {
if conn == c {
continue
}
//心跳檢查,需要傳送資料的時候才檢查規定時間內有沒有資料
if heart.endTime < time.Now().Unix() {
delete(ConnSlice, conn) //刪除連線
conn.Close()
fmt.Println("刪除連接", conn.RemoteAddr())
fmt.Println("現在存有連結", ConnSlice)
continue
}
conn.Write(buffer[0:n])
}
}
}
[Go][Socket]聊天室(Server)
留言
留言分享你的想法!
小黑與程式的邂逅
8會員
123內容數
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
小黑與程式的邂逅的其他內容
2024/06/05
GOB
Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。
遠端存取的要求條件
方法的類型可輸出
方法的本體可輸出
方法必須要有兩個參數是輸出或內建
方法的第二個參數是指標型
方法的返回類型為

2024/06/05
GOB
Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。
遠端存取的要求條件
方法的類型可輸出
方法的本體可輸出
方法必須要有兩個參數是輸出或內建
方法的第二個參數是指標型
方法的返回類型為

2024/06/04
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。
映射關係
table->struct
record->object
field->attribute
安裝
go get github.com/astaxie/beego/orm
go get github.com

2024/06/04
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。
映射關係
table->struct
record->object
field->attribute
安裝
go get github.com/astaxie/beego/orm
go get github.com

2024/06/03
Gorm是一款性能極好的ORM,且友善,因此可以明顯的提高開發效率。
特點
全功能ORM
支持連結
支援Hook
支持預先載入
支援交易
支持復合主鍵
支持SQL生成器
支援資料庫自動遷移
支援自訂日誌
可擴充性
所有功能都被測試覆蓋
安裝
go get -u gor

2024/06/03
Gorm是一款性能極好的ORM,且友善,因此可以明顯的提高開發效率。
特點
全功能ORM
支持連結
支援Hook
支持預先載入
支援交易
支持復合主鍵
支持SQL生成器
支援資料庫自動遷移
支援自訂日誌
可擴充性
所有功能都被測試覆蓋
安裝
go get -u gor

你可能也想看














在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。

在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。

小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!

小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!

這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。

這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。

前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。
Server端
我們的Serve

前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。
Server端
我們的Serve

關於Websockets的篇章, 有興趣的朋友歡迎參考:
【Python 軍火庫 - websockets】雙向溝通的渠道
【Python 軍火庫 - websockets】用json來溝通吧!
而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲

關於Websockets的篇章, 有興趣的朋友歡迎參考:
【Python 軍火庫 - websockets】雙向溝通的渠道
【Python 軍火庫 - websockets】用json來溝通吧!
而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。

gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。
使用
到https://github.com/protocolbuffers/protobuf/releases下

gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。
使用
到https://github.com/protocolbuffers/protobuf/releases下