Golang如何使用websocket
下载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的更多相关文章
- golang vue 使用 websocket 的例子
		一. 编写golang服务端 1.导入必要的websocket包,golang.org/x/net/websocket 或 github.com/golang/net/websocket 2.编写消息 ... 
- golang gorilla websocket例子
		WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. WebSocket通信协议于2011年被IETF定 ... 
- HTML5 直播协议之 WebSocket 和 MSE
		当前为了满足比较火热的移动 Web 端直播需求, 一系列的 HTML5 直播技术迅速的发展了起来. 常见的可用于 HTML5 的直播技术有 HLS, WebSocket 与 WebRTC. 今天我要向 ... 
- WebSocket+MSE——HTML5 直播技术解析
		作者 | 刘博(又拍云多媒体开发工程师) 当前为了满足比较火热的移动 Web 端直播需求,一系列的 HTML5 直播技术迅速的发展起来. 常见的可用于 HTML5 的直播技术有 HLS.WebSock ... 
- [翻译自官方]什么是RDB和AOF? 一文了解Redis持久化!
		概述 本文提供Redis持久化技术说明, 建议所有Redis用户阅读. 如果您想更深入了解Redis持久性原理机制和底层持久性保证, 请参考文章 揭秘Redis持久化: http://antire ... 
- golang之websocket 源码分析
		下载go的websocket包. 1. 通过google官方的方法, 需要hg来同步代码. 由于墙的原因, 还需要设置代理. 比较麻烦 2. http://gopm.io/ 通过该网站下载, 这是go ... 
- golang(5):编写WebSocket服务,client和html5调用
		本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 转载请必须注明出处! 1.关于websocket HTML5定义了 ... 
- WebSocket 和 Golang 实现聊天功能
		http://www.open-open.com/lib/view/open1416379948711.html 这个示例应用程序展示了如何使用 WebSocket, Golang 和 jQuery ... 
- Golang websocket推送
		Golang websocket推送 在工作用主要使用的是Java,也做过IM(后端用的netty websocket).最近想通过Golang重写下,于是通过websocket撸了一个聊天室. 项目 ... 
随机推荐
- http  协议三次握手
			HTTP是超文本传输协议,信息是明文传输.TPC/IP协议是传输层协议,主要解决数据如何在网络中传输.HTTP是应用层协议,主要解决如何包装数据. [HTTP与TCP/IP]和其他的协议在最初OSI模 ... 
- Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机
			文章目录 1. 开箱即用,内藏玄机 2. 总结 3. 源代码 Spring Boot提供了很多”开箱即用“的依赖模块,那么,Spring Boot 如何巧妙的做到开箱即用,自动配置的呢? 开箱即用,内 ... 
- PHPweb应用攻击总结(转)
			XSS跨站脚本 概念:恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的. 危害: 盗取用户COOKIE信息. 跳转 ... 
- Python网络爬虫之requests模块(1)
			引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ... 
- builder模式-积木系列
			代码高效的表达意图,是优秀代码的基本标准,所以在刚刚写代码的时候我们总是被教育方法的名字,变量字段的名字要尽可能表达出在程序中的含义. 在<重构和模式>中提到的creation,就是讲构造 ... 
- java中事件驱动
			在java语言中,事件不是由事件源自己来处理的,而是交给事件监听者来处理,要将事件源(如按钮)和对事件的具体处理分离开来.这就是所谓的事件委托处理模型. 事件委托处理模型由产生事件的事件源.封装事件相 ... 
- eclipse + cdt
			Window > Preferences > General > Appearance中设置主题颜色. Help > eclipse marketplace > find ... 
- this语句的知识点第五点
			对不起大家久等了 最后一点 第五点 给元素中的某一个事件绑定方法,当事件触发时,执行绑定的方法,方法中的this指向当前元素. funciton fn(){ console.log(this) } d ... 
- oracle 数据库备份、还原、和使用心得(表丢失、视图丢失的解决办法)
			一.oracle数据备份:exp 关键字 说明(默认值) 关键字 说明(默认值) --------------------------------- ... 
- hibernate中带查询条件的分页
			所谓分页,从数据库中分,则是封装一个分页类.利用分页对象进行分页. 但,分页往往带查询条件. 分页类的三个重要数据:[当前页码数],[数据库中的总记录数],[每页显示的数据的条数] 原理:select ... 
