下载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. python自学第四天,字符串用法

    String 的用法 names="张三 welcome {city}" print(names.capitalize())#首字母大写 print(names.count(&qu ...

  2. ios 手机验证码用户注册(倒计时15秒)

    // // ViewController.m // register手机验证码注册 // // Created by zzqqrr on 17/8/28. // Copyright (c) 2017年 ...

  3. kbmMW User authentication

    任何信息系统的一个非常重要的部分是能够对用户进行身份验证. kbmMW在这里提供了非常强大的机制. TkbmMWSimpleClient提供简单的用户身份验证机制,您可以在连接到应用程序服务器时传递U ...

  4. 区分IE版本的js代码

    function IEVersion() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isIE = userAgen ...

  5. ubuntu下载超快的一个站点

    http://mirrors.163.com/ubuntu-releases/14.04/

  6. 精确率、召回率、准确率与ROC曲线

    精确率表示的是预测为某类样本(例如正样本)中有多少是真正的该类样本,一般用来评价分类任务模型. 比如对于一个分类模型,预测结果为A类的所有样本中包含A0个真正的A样本,和A1个不是A样本的其他类样本, ...

  7. tmux学习

    1.基本命令: http://blog.chinaunix.net/uid-26285146-id-3252286.html (重要) http://blog.csdn.net/longxibendi ...

  8. 关于Linux前后台进程切换

    前言: 当使用SSH远程登录服务器时,对于运行时间较长的程序(如Caffe的训练可能需要十几个小时), SSH可能会在很长时间后断掉,导致程序没运行完就中断了. 为了解决这个问题,需要将在服务器运行的 ...

  9. Codeforces Round #519

    题目链接:传送门   A. Elections (思维+暴力) 思路: 从最小的k开始枚举就好了- -. #include <bits/stdc++.h> using namespace ...

  10. Linux定时任务计划

    Linux定时任务计划 在使用Linux系统时,我们有时会需要让系统在某个时间去执行特定的任务,这时就需要去了解Linux提供的定时任务功能 种类 Linux的定时任务分为两种:单一型和循环型 单一型 ...