为了账号安全,请及时绑定邮箱和手机立即绑定

这个 websocket url “ws://{{$}}/ws” 是什么意思?

这个 websocket url “ws://{{$}}/ws” 是什么意思?

Go
慕姐4208626 2021-06-23 17:05:10
我在 go 中使用 websocket。我从一个简单的例子中得到了一个 websocket url 格式,我像这样用谷歌搜索:ws://{{$}}/ws比较完整的代码如下:主页.html:<html><head><title>Chat Example</title><script type="text/javascript">    $(function() {        ......        if (window["WebSocket"]) {            conn = new WebSocket("ws://{{$}}/ws");            conn.onclose = function(evt) {                appendLog($("<div><b>Connection closed.</b></div>"))            }            conn.onmessage = function(evt) {                appendLog($("<div/>").text(evt.data))            }        } else {            appendLog($("<div><b>Your browser does not support WebSockets.</b></div>"))        }        ......    });</script></head></html>和 wsServer.go:package mainimport (    "flag"    "log"    "net/http"    "text/template")var addr = flag.String("addr", ":8080", "http service address")var homeTempl = template.Must(template.ParseFiles("home.html"))func serveHome(w http.ResponseWriter, r *http.Request) {    ......    w.Header().Set("Content-Type", "text/html; charset=utf-8")    homeTempl.Execute(w, r.Host)}func main() {    http.HandleFunc("/", serveHome)    http.HandleFunc("/ws", serveWs)    err := http.ListenAndServe(:8080, nil)    if err != nil {        log.Fatal("ListenAndServe: ", err)    }}我以为这将是一个正则表达式,而实际上我无法解释它。我在我自己的 PC 浏览器上测试它,并连接成功:http://localhost:8080 但http://ip:8080 (which ip is my computer's also the litsening server's ip)不是。为什么?当然,当我将“ws://{{$}}/ws”更改为某个网址时它会起作用。但我想知道为什么?这个表达式可以匹配什么?完整的示例代码很大,我认为上面的问题已经足够了。如果我错过了什么,你可以在这个页面找到完整的例子:https : //github.com/garyburd/go-websocket/tree/master/examples/chat
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

我猜你正在使用Go的模板包。{{ placeholders }}由这些大括号注释的模板包支持。这些大括号中可能包含的语句rangeif等等,和变量名。变量名称$是一个特殊名称,指向传递给template.Execute方法的根元素。

请添加您的wsServe方法的代码,以便我们可以看到您传递给模板的值。之后我会扩展我的答案。


查看完整回答
反对 回复 2021-06-28
  • 1 回答
  • 0 关注
  • 401 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信