积累知识,胜过积蓄金银!毕竟在golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《通过原始 tcp 套接字接受和路由
积累知识,胜过积蓄金银!毕竟在golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《通过原始 tcp 套接字接受和路由 Http 请求》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
问题内容我正在构建一个 WEB 服务器,它必须接受来自客户端的 http 请求,但也必须接受来自对等点的原始 tcp 套接字请求。由于 http 在 tcp 上运行,因此我尝试通过 tcp 服务器路由 http 请求,而不是运行两个单独的服务。
有没有一种简单的方法可以使用 net.conn.read() 读取数据,确定它是否是 http get/post 请求并将其传递给内置的 http 处理程序或 Gorilla mux?现在我的代码如下所示,我正在自己构建 http 路由逻辑:
func ListenConn() {
listen, _ := net.Listen("tcp", ":8080")
defer listen.Close()
for {
conn, err := listen.Accept()
if err != nil {
logger.Println("listener.go", "ListenConn", err.Error())
}
go HandleConn(conn)
}
}
func HandleConn(conn net.Conn) {
defer conn.Close()
// determines if it is an http request
scanner := bufio.NewScanner(conn)
for scanner.Scan() {
ln := scanner.Bytes()
fmt.Println(ln)
if strings.Fields(string(ln))[0] == "GET" {
http.GetReGIStrationCode(conn, strings.Fields(string(ln))[1])
return
}
... raw tcp handler code
}
}
混合 http 和原始 tcp 流量不是一个好主意。
考虑应用程序和客户端之间的所有防火墙和路由器。它们都旨在实现安全的 http(s) 传输。他们将如何处理与有效 http 相同端口的 tcp 流量?
作为一种解决方案,您可以将流量拆分到同一应用程序中的两个不同端口。
通过端口分离,您可以独立路由 http 和 tcp 流量,并为每个通道配置适当的网络安全性。
监听 2 个不同端口的示例代码:
package main
import (
"fmt"
"net"
"net/http"
"os"
)
type httpHandler struct {
}
func (m *httpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Println("HTTP request")
}
func main() {
// http
go func() {
http.ListenAndServe(":8001", &httpHandler{})
}()
// tcp
l, err := net.Listen("tcp", "localhost:8002")
if err != nil {
fmt.Println("Error listening:", err.Error())
os.Exit(1)
}
defer l.Close()
for {
conn, err := l.Accept()
if err != nil {
fmt.Println("Error accepting: ", err.Error())
os.Exit(1)
}
go handleRequest(conn)
}
}
// Handles incoming requests.
func handleRequest(conn net.Conn) {
// read/write from connection
fmt.Println("TCP connection")
conn.Close()
}
在浏览器中打开http://localhost:8001/
并运行命令行 echo -n "test" | nc localhost 8002
来测试监听器
今天关于《通过原始 TCP 套接字接受和路由 http 请求》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注编程网公众号!
--结束END--
本文标题: 通过原始 TCP 套接字接受和路由 http 请求
本文链接: https://lsjlt.com/news/595865.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0