下载websocket包

$ go get golang.org/x/net/websocket

如果下载失败,可能是被墙了。

package golang.org/x/net/websocket: unrecognized import path "golang.org/x/net/websocket" (https fetch: Get https://golang.org/x/net/websocket?go-get=1: dial tcp 216.239.37.1:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)

可以尝试

$ go get -u github.com/golang/net/websocket

下载后记得将路径改成golang.org/x/net/websocket

$ cd $GOPATH
$ mkdir -p golang.org/x/net
$ cp github.com/golang/net/websocket/ golang.org/x/net/ -R

实例

服务端代码

server.go

package main

import (  

    "fmt"   

    "golang.org/x/net/websocket" 

    "html/template"              //支持模板html  

    "log"  

    "net/http"  

)

func Echo(ws *websocket.Conn) {  

    var err error  

    for {  

        var reply string  

        //websocket接受信息  

        if err = websocket.Message.Receive(ws, &reply); err != nil {  

            fmt.Println("receive failed:", err)  

            break  

        }

        fmt.Println("reveived from client: " + reply)

        msg := "received:" + reply

        fmt.Println("send to client:" + msg)

        //这里是发送消息

        if err = websocket.Message.Send(ws, msg); err != nil {

            fmt.Println("send failed:", err)

            break

        }

    }

}

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

    //打印请求的方法  

    fmt.Println("method", r.Method)  

    if r.Method == "GET" { //如果请求方法为get显示login.html,并相应给前端  

        t, _ := template.ParseFiles("websocket.html")  

        t.Execute(w, nil)  

    } else {  

        //否则走打印输出post接受的参数username和password  

        fmt.Println(r.PostFormValue("username"))  

        fmt.Println(r.PostFormValue("password"))  

    }  

}

func main() {

    //接受websocket的路由地址

    http.Handle("/websocket", websocket.Handler(Echo))

    //html页面

    http.HandleFunc("/web", web)

    if err := http.ListenAndServe(":1234", nil); err != nil {

        log.Fatal("ListenAndServe:", err)

    }

}

客户端代码

websocket.html

<!DOCTYPE html>

 <html>

<head>

    <meta charset="utf-8"/>

    <title>go测试socket</title>

</head>

<body>

    <script type="text/javascript">

        var sock = null;

        var wsuri = "ws://127.0.0.1:1234/websocket";

        window.onload = function() {

            console.log("onload");

            sock = new WebSocket(wsuri);

            sock.onopen = function() {

                console.log("connected to " + wsuri);

            }

            sock.onclose = function(e) {

                console.log("connection closed (" + e.code + ")");

            }

            sock.onmessage = function(e) {

                console.log("message received: " + e.data);

            }

        };

        function send() {

            var msg = document.getElementById('message').value;

            sock.send(msg);

        };

    </script>

    <h1>WebSocket Echo Test</h1>

    <form>

        <p>

            Message: <input id="message" type="text" value="Hello, world!">

        </p>

    </form>

    <button onclick="send();">Send Message</button>

</body>

</html>

测试

启动服务端

$ ./server

启动浏览器

输入http://127.0.0.1:1234/web

网络通信内容如图所示,首先加载页面,接着使用HTTP建立websocket连接,后续通信直接使用websocket进行。

点击 页面中SendMessage按钮

server端输出:

method GET

reveived from client: Hello, world!

send to client:received:Hello, world!

浏览器输出:

参考

https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/08.2.md

https://github.com/ukai/go-websocket-sample/blob/master/websocket_echo_sample.go

Golang如何使用websocket的更多相关文章

  1. golang vue 使用 websocket 的例子

    一. 编写golang服务端 1.导入必要的websocket包,golang.org/x/net/websocket 或 github.com/golang/net/websocket 2.编写消息 ...

  2. golang gorilla websocket例子

    WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. WebSocket通信协议于2011年被IETF定 ...

  3. HTML5 直播协议之 WebSocket 和 MSE

    当前为了满足比较火热的移动 Web 端直播需求, 一系列的 HTML5 直播技术迅速的发展了起来. 常见的可用于 HTML5 的直播技术有 HLS, WebSocket 与 WebRTC. 今天我要向 ...

  4. WebSocket+MSE——HTML5 直播技术解析

    作者 | 刘博(又拍云多媒体开发工程师) 当前为了满足比较火热的移动 Web 端直播需求,一系列的 HTML5 直播技术迅速的发展起来. 常见的可用于 HTML5 的直播技术有 HLS.WebSock ...

  5. [翻译自官方]什么是RDB和AOF? 一文了解Redis持久化!

    ​概述 本文提供Redis持久化技术说明,  建议所有Redis用户阅读. 如果您想更深入了解Redis持久性原理机制和底层持久性保证, 请参考文章 揭秘Redis持久化: http://antire ...

  6. golang之websocket 源码分析

    下载go的websocket包. 1. 通过google官方的方法, 需要hg来同步代码. 由于墙的原因, 还需要设置代理. 比较麻烦 2. http://gopm.io/ 通过该网站下载, 这是go ...

  7. golang(5):编写WebSocket服务,client和html5调用

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 转载请必须注明出处! 1.关于websocket HTML5定义了 ...

  8. WebSocket 和 Golang 实现聊天功能

    http://www.open-open.com/lib/view/open1416379948711.html 这个示例应用程序展示了如何使用 WebSocket, Golang 和 jQuery  ...

  9. Golang websocket推送

    Golang websocket推送 在工作用主要使用的是Java,也做过IM(后端用的netty websocket).最近想通过Golang重写下,于是通过websocket撸了一个聊天室. 项目 ...

随机推荐

  1. ios中scrollView基本用法

    设置scrollView内容的尺寸(滚动的范围) self.scrollView.contentSize = CGSizeMake(, ); self.scrollView.contentSize = ...

  2. Java NIO系列教程

    http://ifeve.com/overview/ http://tutorials.jenkov.com/java-nio/nio-vs-io.html

  3. Python 类方法

    class Person: # 实例方法 def chi(self): print("人会吃") @classmethod # 装饰器, 此时这个方法是一个类方法 def he(c ...

  4. Puppet的一些奇技淫巧

    puppet这个工具真的很神奇,先不说商业版有哪些黑科技,单是开源版本就有很多可能让你摸不着头脑的地方,下面来列举一下puppet是怎么查找puppet server的 其实很简单,puppet ag ...

  5. POJ 1321 棋盘问题 (dfs)

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...

  6. PAP认证(单向、双向)

    实验要求:掌握PAP单向.双向认证 拓扑如下: 单向验证 R1(认证方)enable 进入特权模式configure terminal 进入全局模式hostname R1 设置主机名interface ...

  7. 【转载】 详解BN(Batch Normalization)算法

    原文地址: http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce ------------------------------- ...

  8. redis实现api限流

    redis官方给出了参考文档:INCR 这里参考第一种方法,使用token bucket实现:每个用户每秒有一个Counter: func RateLimiter(uid string, rlType ...

  9. python之路,正则表达式

    python3 正则表达式 前言: (1). 处理文本称为计算机主要工作之一(2)根据文本内容进行固定搜索是文本处理的常见工作(3)为了快速方便的处理上述问题,正则表达式技术诞生,逐渐发展为一个单独技 ...

  10. [LeetCode&Python] Problem 447. Number of Boomerangs

    Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...