当前位置: 首页 > 面试题库 >

如何捕获像ctrl + c这样的os信号并通过Go中的gorilla websocket发送它们

孟品
2023-03-14
问题内容

我是go和websocket的新手。我试图逐个输入字符并将其写入websocket。我什至要以ctrl + c作为输入并将其写入websocket。

func (c *poc) writePump() {

    var err error

    exec.Command("stty", "-F", "/dev/tty", "cbreak", "min", "1").Run()
    exec.Command("stty", "-F", "/dev/tty", "-echo").Run()
    defer exec.Command("stty", "-F", "/dev/tty", "echo").Run()

    var b = make([]byte, 1)
    d := make(chan os.Signal, 1)
    signal.Notify(d, os.Interrupt)

    for {
        os.Stdin.Read(b)
        err = c.ws.WriteMessage(websocket.TextMessage, b)
        if err != nil {
            log.Printf("Failed to send UTF8 char: %s", err)
        }

        go func() {
            for sig := range d {
                // ????
            }
        }()
    }
}

此代码正在捕获信号,但不确定如何写入websocket。


问题答案:

发送CTRL-C与

err = c.ws.WriteMessage(websocket.TextMessage, []byte{'\003'})
if err != nil {
    // handle error
}

其他有用的信息:

  • printf提到了UTF-8字符,但是不能保证该字节是有效的UTF-8字符。考虑改用websocket.BinaryMessage。

  • 使用互斥锁可防止同时写入Websocket连接。

  • 另一种方法是将信号带外发送到对等方,并向远程进程发送信号。



 类似资料:
  • 问题内容: 在Windows操作系统下。 我通过Runtime.getRuntime()。exec()启动一个子进程;我想向进程发送“ ctrl -c”以停止它。 我用Runtime.getRuntime()。exec(“ ping google.com -n 100000”);做了一个小例子。可以在以下位置找到代码:http : //pastebin.com/f6315063f 到目前为止,我尝

  • 我正在为android编写一个rtp视频流,它从android本地套接字读取h264编码的数据并将其打包。问题是我做到了,但我在客户端(Voip)中不断收到黑帧。 通信方式如下:Android- 有几件事我还不明白: 1) Android的mediarecorder给了我一个原始的h264流,我怎么知道NAL何时根据该流开始/结束?它没有任何0x000001模式,但它有一个0x0000(我假设它是

  • 查看:app/views/home/index.html.erb 路线:

  • 问题内容: 我想捕获从控制台发送的()信号并打印出部分运行总计。 Golang有可能吗? 注意:当我第一次发布问题时,我对被代替感到困惑。 问题答案: 您可以使用os / signal包来处理输入信号。+ 是SIGINT,因此您可以使用它来捕获。 导致程序终止和打印信息的方式完全取决于您。

  • 通过上一节《 Go语言goroutine》的学习,关键字 go 的引入使得在Go语言中并发编程变得简单而优雅,但我们同时也应该意识到并发编程的原生复杂性,并时刻对并发中容易出现的问题保持警惕。 事实上,不管是什么平台,什么编程语言,不管在哪,并发都是一个大话题。并发编程的难度在于协调,而协调就要通过交流,从这个角度看来,并发单元间的通信是最大的问题。 在工程上,有两种最常见的并发通信模型:共享数据

  • 我正在尝试添加对信号的支持(尤其是对Ctrl C)。我的工具是用Java编写的,当被捕获时,我想执行清理。我的主文件是应用程序,代码和平如下: 应用程序解析用户的选项并运行适当的方法。因此,当用户使用“执行”选项并单击Ctrl C时,我希望程序停止并清理该区域。为了处理信号,我添加了performShutdownHooks方法,如下所示: 它做我想做的——如果我运行工具并在它运行时杀死它,它会进行