protoevent
v1.0.0 Release
ProtoEvent เป็นไลบรารีการจัดการการเชื่อมต่อ TCP ตามเหตุการณ์ใน Golang ง่ายและไม่ใช้ประโยชน์จากฟังก์ชันพื้นฐานของการเชื่อมต่อโปรโตคอลใหม่มากเกินไป ProtoEvent ปรับใช้อินเทอร์เฟซ net.Listener
และ net.Conn
เพื่อเพิ่มความสามารถในการบันทึกเหตุการณ์ต่างๆ ที่เกิดขึ้นในการสื่อสารเครือข่าย
มันเจ็บปวดมากพอแล้วเมื่อคุณต้องดูแล codebase ของแอปพลิเคชั่นเครือข่ายธรรมดา ๆ ของคุณซึ่งไม่ได้รับการจัดระเบียบอย่างดี จบลงด้วยการสร้างโค้ดสปาเก็ตตี้มากขึ้น อย่างน้อยตอนนี้เราสามารถจัดระเบียบตรรกะของแอปพลิเคชันตามเหตุการณ์เครือข่ายบางอย่างได้แล้ว
go get -u https://github.com/parinpan/protoevent
แอปพลิเคชันฝั่งเซิร์ฟเวอร์:
package main
import (
"encoding/json"
"fmt"
"net"
"github.com/parinpan/protoevent"
)
type Message struct {
From string `json:"from"`
}
func main () {
servant , event , err := protoevent . CreateServant ( "tcp" , "0.0.0.0:8089" )
if nil != err {
panic ( err )
}
event . OnConnectionError ( func ( err error ) {
})
event . OnConnectionAccepted ( func ( conn net. Conn ) {
fmt . Println ( "Accepting new connection: " , conn . RemoteAddr ())
})
event . OnConnectionClosed ( func ( conn net. Conn ) {
})
event . OnReceiveMessageError ( func ( conn net. Conn , err error ) {
})
event . OnMessageReceived ( func ( conn net. Conn , message [] byte , rawMessage [] byte ) {
fmt . Println ( "Received a message: " , string ( message ))
var msg Message
_ = json . Unmarshal ( message , & msg )
// send a message back to client
sayHiMessage := fmt . Sprint ( "Hi " , msg . From , ". Welcome to ProtoEvent!" )
conn . Write ([] byte ( sayHiMessage ))
})
event . OnSendMessageError ( func ( conn net. Conn , message [] byte , err error ) {
})
event . OnMessageSent ( func ( conn net. Conn , message [] byte ) {
fmt . Println ( "Sent a message: " , string ( message ))
})
servant . SetDefaultReadSize ( 4096 ) // set default read size per chunk in bytes
servant . Serve ()
}
แอปพลิเคชันฝั่งไคลเอ็นต์:
package main
import (
"fmt"
"net"
"github.com/parinpan/protoevent"
)
func main () {
agent , event := protoevent . CreateAgent ( "tcp" , "0.0.0.0:8089" )
agent . SetDefaultReadSize ( 4096 ) // set default read size per chunk in bytes
event . OnConnectionError ( func ( err error ) {
})
event . OnConnectionAccepted ( func ( conn net. Conn ) {
fmt . Println ( "Accepting new connection: " , conn . RemoteAddr ())
})
event . OnConnectionClosed ( func ( conn net. Conn ) {
})
event . OnReceiveMessageError ( func ( conn net. Conn , err error ) {
})
event . OnMessageReceived ( func ( conn net. Conn , message [] byte , rawMessage [] byte ) {
fmt . Println ( "Received a message: " , string ( message ))
})
event . OnSendMessageError ( func ( conn net. Conn , message [] byte , err error ) {
})
event . OnMessageSent ( func ( conn net. Conn , message [] byte ) {
fmt . Println ( "Sent a message: " , string ( message ))
})
// trigger a message to get connected with the server at first
err := agent . Run ( func ( conn net. Conn ) error {
_ , err := conn . Write ([] byte ( `{"from": "AgentV1"}` ))
return err
})
if nil != err {
panic ( err )
}
}
หากคุณมีข้อสงสัยใดๆ คุณสามารถติดตามฉันได้ที่: