From 6d1b058de809e50c18ecffb628cb07d06c28bb68 Mon Sep 17 00:00:00 2001 From: eson <474420502@qq.com> Date: Tue, 27 Apr 2021 18:36:08 +0800 Subject: [PATCH] TODO: think --- .vscode/launch.json | 2 +- background/worker.js | 3 +- content/inject.js | 45 ++++++++++++++++++---- server/.gitignore | 28 ++++++++++++++ server/case_test.go | 12 ++++++ server/go.mod | 6 ++- server/go.sum | 6 +++ server/main.go | 88 +++++++++++++++++++++++++------------------- server/middleware.go | 45 ++++++++++++++++++++++ server/task.go | 28 ++++++++++++++ 10 files changed, 214 insertions(+), 49 deletions(-) create mode 100644 server/.gitignore create mode 100644 server/case_test.go create mode 100644 server/middleware.go create mode 100644 server/task.go diff --git a/.vscode/launch.json b/.vscode/launch.json index e351a57..7537d38 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -24,7 +24,7 @@ "--disable-features=TranslateUI", "--test-type", ], - "url": "http:/localhost:7123", + "url": "http:/localhost:12203/start", "webRoot": "${workspaceFolder}" } ] diff --git a/background/worker.js b/background/worker.js index b08f986..73f6aa2 100644 --- a/background/worker.js +++ b/background/worker.js @@ -2,7 +2,8 @@ console.log("background"); chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { console.log(request, sender) - sendResponse({}); + // sendResponse({}); + }); diff --git a/content/inject.js b/content/inject.js index 6a96133..c0dd45e 100644 --- a/content/inject.js +++ b/content/inject.js @@ -1,14 +1,43 @@ -// var href = window.location.href; + +if( window.location.href === "http://localhost:12203/start") { + + var ws = new WebSocket("ws://localhost:12203/task"); + ws.onopen = function(evt) { + console.log("Connection open ...", evt); + ws.send("Hello WebSockets!"); + }; + + ws.onmessage = function(evt) { + + console.log("Received Message: ", JSON.parse(evt.data)); + + // if (window.location.hostname !== "www.zhipin.com") { + // var handler = window.open("https://www.zhipin.com/") + // } + chrome.runtime.sendMessage(JSON.parse(evt.data)) + }; + + ws.onclose = function(evt) { + console.log("Connection closed."); + }; + + ws.onerror = function(evt) { + console.log(evt); + } + +} -setInterval(function name() { - chrome.runtime.sendMessage({say: "Hello"}) - fetch("http://localhost:12203/api").then((response)=>{ - console.log(response); - console.log(response.json()) - }) -}, 10000) + +// setInterval(function name() { +// chrome.runtime.sendMessage({say: "Hello"}) + +// fetch("http://localhost:12203/api").then((response)=>{ +// console.log(response); +// console.log(response.json()) +// }) +// }, 10000) // if(href.startsWith(Host)) { // setInterval(function(){ diff --git a/server/.gitignore b/server/.gitignore new file mode 100644 index 0000000..0f21a07 --- /dev/null +++ b/server/.gitignore @@ -0,0 +1,28 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/go +# Edit at https://www.toptal.com/developers/gitignore?templates=go + +### Go ### +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +### Go Patch ### +/vendor/ +/Godeps/ + +# End of https://www.toptal.com/developers/gitignore/api/go + +server diff --git a/server/case_test.go b/server/case_test.go new file mode 100644 index 0000000..33f1f78 --- /dev/null +++ b/server/case_test.go @@ -0,0 +1,12 @@ +package main + +import ( + "testing" + + "github.com/474420502/focus/compare" + pqueuekey "github.com/474420502/focus/priority_queuekey" +) + +func Benchmark123(b *testing.B) { + pqueuekey.New(compare.Int) +} diff --git a/server/go.mod b/server/go.mod index 4e62b63..0cf49ef 100644 --- a/server/go.mod +++ b/server/go.mod @@ -2,4 +2,8 @@ module server go 1.16 -require github.com/gin-gonic/gin v1.7.1 +require ( + github.com/474420502/focus v0.13.3 // indirect + github.com/gin-gonic/gin v1.7.1 + github.com/gorilla/websocket v1.4.2 +) diff --git a/server/go.sum b/server/go.sum index e64a799..6fd5983 100644 --- a/server/go.sum +++ b/server/go.sum @@ -1,3 +1,6 @@ +github.com/474420502/focus v0.13.3 h1:fiP6HNSfOukx76xUovKG5WzswMysHF7A5xhyrcYCrLU= +github.com/474420502/focus v0.13.3/go.mod h1:SrqNq63qSx53TkvVWOuHTbTSvAQTNO8ZUrufXm0Ncq8= +github.com/Pallinder/go-randomdata v1.1.0/go.mod h1:yHmJgulpD2Nfrm0cR9tI/+oAgRqCQQixsA8HyRZfV9Y= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -16,6 +19,8 @@ github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= @@ -46,6 +51,7 @@ golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtD golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/server/main.go b/server/main.go index f76da4a..e99a5b9 100644 --- a/server/main.go +++ b/server/main.go @@ -1,56 +1,68 @@ package main import ( + "encoding/json" + "log" "net/http" + "time" "github.com/gin-gonic/gin" + "github.com/gorilla/websocket" ) -// Cors 跨域中间间 -func Cors() gin.HandlerFunc { - return func(c *gin.Context) { - method := c.Request.Method //请求方法 - origin := c.Request.Header.Get("Origin") //请求头部 - // var headerKeys []string // 声明请求头keys - // for k := range c.Request.Header { - // headerKeys = append(headerKeys, k) - // } - // headerStr := strings.Join(headerKeys, ", ") - // if headerStr != "" { - // headerStr = fmt.Sprintf("access-control-allow-origin, access-control-allow-headers, %s", headerStr) - // } else { - // headerStr = "access-control-allow-origin, access-control-allow-headers" - // } - if origin != "" { - c.Writer.Header().Set("Access-Control-Allow-Origin", "*") - - c.Header("Access-Control-Allow-Origin", "*") // 这是允许访问所有域 - c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE") //服务器支持的所有跨域请求的方法,为了避免浏览次请求的多次'预检'请求 - // header的类型 - c.Header("Access-Control-Allow-Headers", "Authorization, Content-Length, X-CSRF-Token, Token,session,X_Requested_With,Accept, Origin, Host, Connection, Accept-Encoding, Accept-Language,DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Pragma") - // 允许跨域设置 可以返回其他子段 - c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,FooBar") // 跨域关键设置 让浏览器可以解析 - c.Header("Access-Control-Max-Age", "172800") // 缓存请求信息 单位为秒 - c.Header("Access-Control-Allow-Credentials", "true") // 跨域请求是否需要带cookie信息 默认设置为true - c.Set("content-type", "application/json") // 设置返回格式是json - } - - //放行所有OPTIONS方法 - if method == "OPTIONS" { - c.JSON(http.StatusOK, "Options Request!") - } - // 处理请求 - c.Next() // 处理请求 - } +var upGrader = websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { + return true + }, } func main() { eg := gin.Default() eg.Use(Cors()) - eg.GET("api", func(c *gin.Context) { + + eg.GET("start", func(c *gin.Context) { c.JSON(0, gin.H{ - "api": "ok", + "task": "ok", }) }) + + eg.GET("task", func(c *gin.Context) { + //升级get请求为webSocket协议 + ws, err := upGrader.Upgrade(c.Writer, c.Request, nil) + if err != nil { + return + } + defer ws.Close() + + mt, message, err := ws.ReadMessage() + if err != nil { + c.Error(err) + return + } + + for { + + //读取ws中的数据 + + log.Println( + "123", + ) + msg := gin.H{ + "content": string(message), + } + data, err := json.Marshal(msg) + if err != nil { + log.Println(err) + } + //写入ws数据 + err = ws.WriteMessage(mt, data) + if err != nil { + c.Error(err) + break + } + time.Sleep(time.Second * 10) + } + + }) eg.Run(":12203") } diff --git a/server/middleware.go b/server/middleware.go new file mode 100644 index 0000000..f5677ff --- /dev/null +++ b/server/middleware.go @@ -0,0 +1,45 @@ +package main + +import ( + "net/http" + + "github.com/gin-gonic/gin" +) + +// Cors 跨域中间间 +func Cors() gin.HandlerFunc { + return func(c *gin.Context) { + method := c.Request.Method //请求方法 + origin := c.Request.Header.Get("Origin") //请求头部 + // var headerKeys []string // 声明请求头keys + // for k := range c.Request.Header { + // headerKeys = append(headerKeys, k) + // } + // headerStr := strings.Join(headerKeys, ", ") + // if headerStr != "" { + // headerStr = fmt.Sprintf("access-control-allow-origin, access-control-allow-headers, %s", headerStr) + // } else { + // headerStr = "access-control-allow-origin, access-control-allow-headers" + // } + if origin != "" { + c.Writer.Header().Set("Access-Control-Allow-Origin", "*") + + c.Header("Access-Control-Allow-Origin", "*") // 这是允许访问所有域 + c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE") //服务器支持的所有跨域请求的方法,为了避免浏览次请求的多次'预检'请求 + // header的类型 + c.Header("Access-Control-Allow-Headers", "Authorization, Content-Length, X-CSRF-Token, Token,session,X_Requested_With,Accept, Origin, Host, Connection, Accept-Encoding, Accept-Language,DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Pragma") + // 允许跨域设置 可以返回其他子段 + c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,FooBar") // 跨域关键设置 让浏览器可以解析 + c.Header("Access-Control-Max-Age", "172800") // 缓存请求信息 单位为秒 + c.Header("Access-Control-Allow-Credentials", "true") // 跨域请求是否需要带cookie信息 默认设置为true + c.Set("content-type", "application/json") // 设置返回格式是json + } + + //放行所有OPTIONS方法 + if method == "OPTIONS" { + c.JSON(http.StatusOK, "Options Request!") + } + // 处理请求 + c.Next() // 处理请求 + } +} diff --git a/server/task.go b/server/task.go new file mode 100644 index 0000000..4f09e79 --- /dev/null +++ b/server/task.go @@ -0,0 +1,28 @@ +package main + +import ( + "sync" + + pqueuekey "github.com/474420502/focus/priority_queuekey" + "github.com/gin-gonic/gin" +) + +type Task struct { +} + +type Queue struct { + lock sync.Mutex + count uint64 + queue *pqueuekey.PriorityQueue +} + +func (q *Queue) Push(task *Task) { + q.lock.Lock() + defer q.lock.Unlock() + q.count++ + q.queue.Push(q.count, task) +} + +func PushQueue(c *gin.Context) { + +}