当前位置: 首页 > news >正文

wp网站建设国外做微课的网站

wp网站建设,国外做微课的网站,html网页制作企业类网站,wordpress 微博登录注册项目地址 https://github.com/cmdch2017/http_tcpServer 项目结构 如何快速上手 http篇 1、controller包就相当于RestController,这里返回了一个Person对象,当你需要新建一个接口时,再新写一个func仿照下面的方法就行了 package control…

项目地址

https://github.com/cmdch2017/http_tcpServer

项目结构

在这里插入图片描述

如何快速上手

http篇

1、controller包就相当于@RestController,这里返回了一个Person对象,当你需要新建一个接口时,再新写一个func仿照下面的方法就行了

package controllerimport ("net/http""testproject12/common""testproject12/entity""testproject12/util"
)// PersonHandler 无入参,返回person类
func PersonHandler(w http.ResponseWriter, r *http.Request) {// 创建一个Person对象person := entity.Person{Name:  "John Doe",Age:   30,Title: "Software Engineer",}messageHex := "FFFFFF"util.SendHexMessageToAllUser(messageHex)// 封装为JSON格式的CommonResult并写入响应体common.WriteJSONResponse(w, http.StatusOK, common.DefaultSuccessMsg, person)
}

2、router.go负责配置路由,下面的代码中,server.AddRoute的key相当于@RequestMapping(“/person”),value是上面文件在controller包下,方法是PersonHandler

package routerimport ("testproject12/controller""testproject12/httpServer"
)func SetupRoutes(server *httpServer.HTTPServer) {// 添加路由server.AddRoute("/person", controller.PersonHandler)// Add more routes as needed
}

在这里插入图片描述

tcp篇

用SocketTool新建一个客户端
在这里插入图片描述
在这里插入图片描述
http://localhost:8080/person
在这里插入图片描述
服务器收到数据FFFFFF
在这里插入图片描述

总结

实现了http请求与tcp请求,如果有需要的话请fork我的github代码

性能

在这里插入图片描述

附录

完整代码

package commonimport ("encoding/json""fmt""net/http"
)// Constants for CommonResult keys
const (CodeTag = "code"MsgTag  = "msg"DataTag = "data"
)// Default success and failure messages
const (DefaultSuccessMsg = "操作成功"DefaultFailedMsg  = "操作失败"
)// CommonResult creates a new CommonResult object with the given code and message
func CommonResult(code int, msg string) map[string]interface{} {return map[string]interface{}{CodeTag: code,MsgTag:  msg,}
}func CommonResultWithData(code int, msg string, data interface{}) map[string]interface{} {result := CommonResult(code, msg)if data != nil {result[DataTag] = data}return result
}// Success returns a CommonResult representing success with an optional data payload
func Success(data ...interface{}) map[string]interface{} {result := CommonResult(HttpStatusSuccess, DefaultSuccessMsg)if len(data) > 0 {result[DataTag] = data[0]}return result
}// Error returns a CommonResult representing an error with an optional data payload
func Error(msg string, data ...interface{}) map[string]interface{} {result := CommonResult(HttpStatusError, msg)if len(data) > 0 {result[DataTag] = data[0]}return result
}// HttpStatus constants
const (HttpStatusSuccess = iotaHttpStatusError
)func WriteJSONResponse(w http.ResponseWriter, code int, msg string, data interface{}) {// 创建一个CommonResult并将数据放入其中result := CommonResultWithData(code, msg, data)// 将CommonResult对象序列化为JSON格式的字符串resultData, err := json.Marshal(result)if err != nil {fmt.Println("json格式化错误")http.Error(w, "Internal Server Error", http.StatusInternalServerError)return}// 设置响应头为JSON格式w.Header().Set("Content-Type", "application/json")// 将JSON数据写入响应体w.Write(resultData)
}
package controllerimport ("net/http""testproject12/common""testproject12/entity""testproject12/util"
)// PersonHandler 无入参,返回person类
func PersonHandler(w http.ResponseWriter, r *http.Request) {// 创建一个Person对象person := entity.Person{Name:  "John Doe",Age:   30,Title: "Software Engineer",}messageHex := "FFFFFF"util.SendHexMessageToAllUser(messageHex)// 封装为JSON格式的CommonResult并写入响应体common.WriteJSONResponse(w, http.StatusOK, common.DefaultSuccessMsg, person)
}
package entityimport "net"type ClientInfo struct {Conn net.Conn
}
package entitytype Person struct {Name  string `json:"name"`Age   int    `json:"age"`Title string `json:"title"`
}
package httpServerimport ("fmt""net/http"
)// HTTPServer represents an HTTP tcpserver
type HTTPServer struct {routes map[string]http.HandlerFunc
}// NewHTTPServer creates a new HTTPServer instance
func NewHTTPServer() *HTTPServer {return &HTTPServer{routes: make(map[string]http.HandlerFunc),}
}// AddRoute adds a new route to the HTTP tcpserver
func (s *HTTPServer) AddRoute(path string, handler http.HandlerFunc) {s.routes[path] = handler
}// RunHTTPServer starts the HTTP tcpserver and sets up the routes
func (s *HTTPServer) RunHTTPServer() {for path, handler := range s.routes {// 添加http路由http.HandleFunc(path, handler)}err := http.ListenAndServe(":8080", nil)if err != nil {fmt.Println("HTTP服务器启动失败:", err)}
}
package mainimport ("testproject12/httpServer""testproject12/router""testproject12/tcpserver"
)func main() {// 创建并运行TCP服务器go tcpserver.NewServer().RunTCPServer()// 创建HTTP服务器httpserver := httpServer.NewHTTPServer()// 设置路由router.SetupRoutes(httpserver)// 启动HTTP服务器go httpserver.RunHTTPServer()select {}
}
package routerimport ("testproject12/controller""testproject12/httpServer"
)func SetupRoutes(server *httpServer.HTTPServer) {// 添加路由server.AddRoute("/person", controller.PersonHandler)// Add more routes as needed
}
package tcpserverimport ("encoding/hex""fmt""net""sync""testproject12/entity"
)// 所有用户信息
var AllConnectionList []net.Conn// Server 服务端结构体
type Server struct {Clients map[string]entity.ClientInfoMutex   sync.Mutex
}// NewServer creates a new Server instance
func NewServer() *Server {return &Server{Clients: make(map[string]entity.ClientInfo),}
}
func SendHexMessage(conn net.Conn, hexMessage string) error {messageBytes, err := hex.DecodeString(hexMessage)if err != nil {fmt.Println("转换错误", err)return err}_, err = conn.Write(messageBytes)if err != nil {fmt.Println("发送消息失败", err)return err}return nil
}// RemoveConnection removes a connection from AllConnectionList
func RemoveConnection(conn net.Conn) {for i, c := range AllConnectionList {if c == conn {AllConnectionList = append(AllConnectionList[:i], AllConnectionList[i+1:]...)break}}
}// RunTCPServer starts the TCP tcpserver
func (s *Server) RunTCPServer() {fmt.Println("服务端启动了")listen, err := net.Listen("tcp", "0.0.0.0:8888")if err != nil {fmt.Println("监听失败", err)return}// 循环等待客户端的连接for {conn, err := listen.Accept()if err != nil {fmt.Println("客户端的等待失败", err)return} else {fmt.Printf("等待连接成功:,con=%v,接受到的客户端信息:%v \n", conn, conn.RemoteAddr().String())// 服务端主动发送消息给客户端messageHex := "48656c6c6f2066726f6d20736572766572" // "Hello from tcpserver" 的十六进制表示SendHexMessage(conn, messageHex)}// 处理客户端连接的协程go s.handleClient(conn)}
}// 处理客户端连接
func (s *Server) handleClient(conn net.Conn) {defer conn.Close()// 获取客户端地址clientAddr := conn.RemoteAddr().String()// 将客户端信息存储到 map 中s.Mutex.Lock()s.Clients[clientAddr] = entity.ClientInfo{Conn: conn, // 存储客户端连接对象}AllConnectionList = append(AllConnectionList, conn)s.Mutex.Unlock()// 处理客户端消息for {buf := make([]byte, 1024)n, err := conn.Read(buf)if err != nil {break}// 处理接收到的消息hexData := hex.EncodeToString(buf[:n])fmt.Println("收到客户端消息:", clientAddr, ":", hexData)}// 客户端断开连接,从 map 中移除该用户s.Mutex.Lock()delete(s.Clients, clientAddr)RemoveConnection(conn)s.Mutex.Unlock()fmt.Println("客户端断开连接:", clientAddr)
}
package utilimport ("encoding/hex""testproject12/tcpserver"
)// SendHexMessage 发送十六进制消息// SendHexMessageToAllUser 广播发送十六进制消息
func SendHexMessageToAllUser(message string) {messageHex := hex.EncodeToString([]byte(message))for _, conn := range tcpserver.AllConnectionList {tcpserver.SendHexMessage(conn, messageHex)}
}

Dockerfile

# Use the official Golang image as the base image
FROM golang:1.21-alpine# Set the working directory inside the container
WORKDIR /go/src/app# Copy the contents of the current directory to the working directory inside the container
COPY . .# Build the Go application
RUN go build -o abc ./main# Add executable permission to the main binary
RUN chmod +x ./abc# Expose the port the application runs on
EXPOSE 8888 8080# Define the command to run the application
CMD ["./abc"]

go.mod

module testproject12go 1.21.4
http://www.yayakq.cn/news/38185/

相关文章:

  • 住房和城乡建设部网站杂志网站建设 网站维护
  • 怎样做类似淘宝网的网站深圳网页设计培训中心
  • 农商网站建设个人总结乌海学校网站建设
  • 手机做网站怎么做自己创业做原公司一样的网站
  • 网站空间服务站电话淮安网站建设找谁好
  • 生鲜网站怎么做恩施建设厅网站
  • 温岭市建设工程质量安全网站黑龙江新闻头条最新消息
  • 做游戏都需要什么网站吗便宜网站制作公司
  • 安庆网站建设专wordpress安装linux
  • 二手房在哪个网站做合同涉县移动网站建设报价
  • 单片机程序员开发网站中国营销网站大全
  • 有网站怎样做推广免费推广网站入口2023燕
  • 深圳网站建设三把火科技印记室内设计网站
  • 上海专业网站建设服做网站是干嘛的
  • 做网站备案需要啥资料友链目录网
  • 网上销售网站建设策划谈期刊网站建设
  • 上海网站报价wordpress quick chat
  • 公民道德建设网站网站收录是什么意思?
  • 烟台网站制作套餐温州网络
  • 做图片赚钱的网站wordpress百度云网盘
  • 营销型网站建设案例分析360建筑网怎样取消发布的消息
  • 深圳网站维护优化认证空间如何显示网站
  • 创建设计公司网站wordpress百度分享
  • 网络优化网站建设学习jsp网站建设项目
  • 上海手机网站哪家最好现在的网站怎样做推广
  • 洛阳网站制作哪家好做网站成本
  • php 网站开发中国建设银行官网站周波
  • 网站安全检测服务wordpress里的模板怎么用
  • 建设网站需要花费多少钱seo研究学院
  • 德清做网站zhihe网站建设 淘宝