package main
import (
"bufio"
"fmt"
"net"
"os"
"time"
)
func main() {
//指定協定
tcpAddr, err := net.ResolveTCPAddr("tcp4", "127.0.0.1:8086")
if err != nil {
Log(os.Stderr, "Fatal error:", err.Error())
os.Exit(1)
}
//建立連線
conn, err := net.DialTCP("tcp", nil, tcpAddr)
if err != nil {
Log("Fatal error:", err.Error())
os.Exit(1)
}
Log(conn.RemoteAddr().String(), "連線成功!")
//發送心跳封包
Sender(conn)
Log("end")
}
func Sender(conn *net.TCPConn) {
defer conn.Close()
sc := bufio.NewReader(os.Stdin)
go func() {
//建立計時器,用於定時發送心跳封包
t := time.NewTicker(time.Second)
defer t.Stop()
for {
<-t.C
_, err := conn.Write([]byte("1"))
if err != nil {
fmt.Println(err.Error())
return
}
}
}()
name := ""
fmt.Println("請輸入暱稱")
fmt.Fscan(sc, &name)
msg := ""
buffer := make([]byte, 1024)
//建立計時器,每次發送訊息就刷新時間
_t := time.NewTimer(time.Second * 5)
defer _t.Stop()
go func() {
<-_t.C
fmt.Println("伺服器故障,斷開鏈接")
return
}()
for {
go func() {
for {
n, err := conn.Read(buffer)
if err != nil {
return
}
//收到訊息就刷新計時器,如果time.Second*5時間到了,那麼就會<-_t.C就不會阻塞,程式碼會往下走,return結束
_t.Reset(time.Second * 5)
//心跳封包訊息定義為字串"1",不需要列印出來
if string(buffer[0:1]) != "1" {
fmt.Println(string(buffer[0:n]))
}
}
}()
fmt.Fscan(sc, &msg)
i := time.Now().Format("2022-01-02 15:04:05")
conn.Write([]byte(fmt.Sprintf("%s\n\t%s: %s", i, name, msg))) //發送訊息
}
}
func Log(v ...interface{}) {
fmt.Println(v...)
return
}
[Go][Socket]聊天室(Client)
留言
留言分享你的想法!
小黑與程式的邂逅
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

你可能也想看












前段時間我們有介紹「【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下

這個問題發生在我們開發Python的Websocket Server時, 使用以下的程式碼架設服務
start_server = websockets.serve(server, 'localhost', args.port)
async with start_server:

這個問題發生在我們開發Python的Websocket Server時, 使用以下的程式碼架設服務
start_server = websockets.serve(server, 'localhost', args.port)
async with start_server:

Accept:用戶端能夠接收的內容類型。
Accept: text/plain, text/html
Accept-Charset:瀏覽器可以接受的字元編碼集。
Accept-Charset: utf8
Accept-Encoding:指定瀏覽器可以支援的web伺服器返回內容壓縮編碼

Accept:用戶端能夠接收的內容類型。
Accept: text/plain, text/html
Accept-Charset:瀏覽器可以接受的字元編碼集。
Accept-Charset: utf8
Accept-Encoding:指定瀏覽器可以支援的web伺服器返回內容壓縮編碼