标签: mux

没有来自gorilla/rpc JSON RPC Service的响应

我正在研究使用gorilla web工具包来创建一个简单的RPC API.我正在使用他们的文档中的示例,我正在使用Chrome中的Advanced Rest Client进行测试并使用

http://localhost:1111/api/ 
Run Code Online (Sandbox Code Playgroud)

并POST以下RAW JSON有效负载:

{"method":"HelloService.Say","params":[{"Who":"Test"}]}
Run Code Online (Sandbox Code Playgroud)

这到达服务器,我知道这是因为我正在记录它(参见下面的代码),我得到200 OK响应.但是我得到"响应不包含任何数据"

我期待下面的Say方法中定义的JSON回复消息.有没有人对问题是什么有任何建议?

package main

import (
    "gorilla/mux"
    "gorilla/rpc"
    "gorilla/rpc/json"
    "log"
    "net/http"
)  

type HelloArgs struct {
    Who string
}

type HelloReply struct {
    Message string
}

type HelloService struct{}

func (h *HelloService) Say(r *http.Request, args *HelloArgs, reply *HelloReply) error {
    log.Printf(args.Who)
    reply.Message = "Hello, " + args.Who + "!"
    log.Printf(reply.Message)
    return nil
}

func main() {
    r := mux.NewRouter()    
    jsonRPC := rpc.NewServer()
    jsonCodec := json.NewCodec()
    jsonRPC.RegisterCodec(jsonCodec, …
Run Code Online (Sandbox Code Playgroud)

rpc go mux

2
推荐指数
1
解决办法
1164
查看次数

如何从处理程序内部通过名称调用路由?

如何从内部处理程序正确引用路径名称?
应该mux.NewRouter()全局分配而不是站在一个功能内吗?

func AnotherHandler(writer http.ResponseWriter, req *http.Request) {
    url, _ := r.Get("home") // I suppose this 'r' should refer to the router
    http.Redirect(writer, req, url, 302)
}

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/", HomeHandler).Name("home")
    r.HandleFunc("/nothome/", AnotherHandler).Name("another")
    http.Handle("/", r)
    http.ListenAndServe(":8000", nil)
}
Run Code Online (Sandbox Code Playgroud)

go mux gorilla

2
推荐指数
1
解决办法
2428
查看次数

Chisel3.功能模块Mux4

我正在学习Chisel,遵循Github上的文档

到目前为止,一切都完美无瑕.但我坚持第13章 "功能模块创建"

无法让代码工作.我在凿子模板项目的副本中创建了所有的.scala类.以下是我编写/复制以创建具有可变位宽Mux4的内容:

/ chisel-template/src/main/scala/Mux4.scala

import Chisel._

class Mux4(w: Int) extends Module {
  val io = IO(new Bundle {
        val sel = UInt(INPUT, 2)
        val in0 = UInt(INPUT, w)
        val in1 = UInt(INPUT, w)
        val in2 = UInt(INPUT, w)
        val in3 = UInt(INPUT, w)
        val out = UInt(OUTPUT, w)
  })

  io.out := Mux2(io.sel(1), 
                    Mux2(io.sel(0), io.in0, io.in1),
                    Mux2(io.sel(0), io.in2, io.in3))
}


class Mux2(w: Int) extends Module {
  val io = IO(new …
Run Code Online (Sandbox Code Playgroud)

scala module mux chisel riscv

2
推荐指数
1
解决办法
270
查看次数

verilog mux在时钟边缘

如何使用时钟边沿作为多路复用器的选择器,我想做什么:

input clk, in1, in2;
output out;
always@ (posedge clk) begin out<=in1; end
always@(negedge clk) begin out<=in2; end
Run Code Online (Sandbox Code Playgroud)

但是,这是不可合成的,因为在单独的always块中有多个驱动程序.有什么工作吗?

verilog mux

1
推荐指数
1
解决办法
2684
查看次数

将管道读取写入 golang 中的 http 响应

这是架构:

客户端向服务器 A 发送 POST 请求

服务器 A 处理这个并向服务器 B 发送一个 GET

服务器 B 通过 A 向客户端发送响应


我虽然最好的想法是制作一个管道来读取 GET 的响应,并写入 POST 的响应,但我遇到了很多类型的问题。

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/test/{hash}", testHandler)

    log.Fatal(http.ListenAndServe(":9095", r))
}

func handleErr(err error) {
    if err != nil {
        log.Fatalf("%s\n", err)
    }
}


func testHandler(w http.ResponseWriter, r *http.Request){

    fmt.Println("FIRST REQUEST RECEIVED")
    vars := mux.Vars(r)
    hash := vars["hash"]
    read, write := io.Pipe()

    // writing without a reader will deadlock so write in a goroutine
    go func() {
        write, …
Run Code Online (Sandbox Code Playgroud)

http pipe go mux

1
推荐指数
1
解决办法
5251
查看次数

使用 Gorilla Mux 端点通过 HTTP 流式传输数据

在我的 REST 端点上收到请求后,我想回复状态200和连续生成和刷新的数据主体(从数据库获取,可能非常大)。我正在寻找一种使用Gorilla Mux的有效方法,因为它已在整个项目中使用。

我看到了,这是可能的Labstack回声,因为它的ResponseWriter 支持 http.Flusher界面允许HTTP处理程序,以冲洗缓冲的数据到客户端)。不幸的是,似乎大猩猩的ResponseWriter不支持这一点。


问题:

  • 有没有办法让 Gorilla Mux 出现这种行为?
  • 如果没有,我会很感激一个指向“最薄”方法的指针来实现这种行为(我已经找到了 Labstack Echo,但也许有更好的方法?)

不变量:

  • 我不能使用WebSockets并且应该将解决方案与 REST API 集成。
  • 我将无法在服务器内存中保存整个文件。

rest flush go endpoint mux

1
推荐指数
1
解决办法
910
查看次数

Go 中的正则表达式字符串

我尝试使用字符串

"/{foo}/{bar:[a-zA-Z0-9=\-\/]+}.{vzz}"
Run Code Online (Sandbox Code Playgroud)

在围棋中。

当我使用时",我看到错误:

unknown escape sequence
Run Code Online (Sandbox Code Playgroud)

当我使用 时',我得到:

cannot use '\u0000' (type rune) as type string in array or slice literal
unknown escape sequence
Run Code Online (Sandbox Code Playgroud)

如何在我的 Go 应用程序中使用此正则表达式进行 MUX?

regex go mux

1
推荐指数
1
解决办法
1992
查看次数

无法手动为rest api设置查询参数(使用mux)

我正在使用mux实现Rest API。验证了某些参数后,我尝试用一​​些默认值填充缺失的参数,稍后通过处理请求的方法处理这些默认值,但是,我注意到手动设置查询参数没有任何效果,除非原始查询直接进行改变了一点点hacky:

func ValidateParameters(r *http.Request) (bool) {

     test := r.URL.Query().Get("test")

   // if test is not provided set some default value

    if test == "" {

        r.URL.Query().Set("test", "Test1") //not working
        r.URL.Query().Add("test", "Test2") //not working
        r.URL.RawQuery = r.URL.RawQuery + "&Test=Test3" // the only method working

     }

       // more code

}
Run Code Online (Sandbox Code Playgroud)

该处理程序在另一个文件中,因此我希望能够test := r.URL.Query().Get("test")获取并设置我在ValidateParameters其中设置的值,该值由请求处理程序调用,但这不起作用。

有什么解释吗?有什么办法可以解决吗?

谢谢。

go mux

1
推荐指数
1
解决办法
283
查看次数

如何将参数传递给 MiddlewareFunc?

我正在做一个小演示,试图解释一个基本的 HTTP 处理程序是如何工作的,我发现了以下示例:

package main

func router() *mux.Router {
    router := mux.NewRouter()
    auth := router.PathPrefix("/auth").Subrouter()
    auth.Use(auth.ValidateToken)
    auth.HandleFunc("/api", middleware.ApiHandler).Methods("GET")
    return router
}

func main() {
    r := router()
    http.ListenAndServe(":8080", r)
}
Run Code Online (Sandbox Code Playgroud)
package auth

func ValidateToken(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        var header = r.Header.Get("secret-access-token")

        json.NewEncoder(w).Encode(r)
        header = strings.TrimSpace(header)

        if header == "" {
            w.WriteHeader(http.StatusForbidden)
            json.NewEncoder(w).Encode("Missing auth token")
            return
        }

        if header != "SecretValue" {
            w.WriteHeader(http.StatusForbidden)
            json.NewEncoder(w).Encode("Auth token is invalid")
            return
        }


        json.NewEncoder(w).Encode(fmt.Sprintf("Token found. Value %s", header))
        next.ServeHTTP(w, …
Run Code Online (Sandbox Code Playgroud)

rest http backend go mux

1
推荐指数
1
解决办法
568
查看次数

是否不可能在带有 Gorilla Mux 的路径中间添加路径参数?

我有以下创建端点的 API 服务器片段,我想将“clusterID”抽象为处理程序中的路径参数。这是路由器部分

func main() {
    router := mux.NewRouter().StrictSlash(true)
    sub := router.PathPrefix("/api/v1").Subrouter()
    sub.Methods("GET").Path("/device/{clusterID}/job").HandlerFunc(authDev(getJob))
    ... 
Run Code Online (Sandbox Code Playgroud)

下面是处理程序的片段。我像往常一样使用mux.Vars(). 如果我向 发送请求localshost/api/v1/device/cluster123/job,处理程序将按预期被调用,但mux.Vars(r)返回一个空映射,而不是按预期返回带有 的映射clusterID=cluster123。Mux 不支持路径中间的变量吗?我知道我可以手动解析路径,但我希望 Mux 为我做这件事。

func getJob(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    log.Println(params["clusterID"]) // outputs an empty string
    log.Println(params) // outputs an empty map
    ...
Run Code Online (Sandbox Code Playgroud)

go mux gorilla

1
推荐指数
1
解决办法
6573
查看次数

标签 统计

mux ×10

go ×8

gorilla ×2

http ×2

rest ×2

backend ×1

chisel ×1

endpoint ×1

flush ×1

module ×1

pipe ×1

regex ×1

riscv ×1

rpc ×1

scala ×1

verilog ×1