go get github.com/gorilla/websocket

相关方法

获取连接

func (u *Upgrader) Upgrade(w http.ResponseWriter,r *http.Request,responseHeader http.Header)(*Conn , error)

关闭连接

func(c *Conn) Close() error

代码实现

package mainimport ("fmt""github.com/gorilla/websocket""net/http""runtime/debug"
)var msg chan []byte
var isClose = false
func main()  {http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {isClose = falsewsClient , _ := (&websocket.Upgrader{CheckOrigin: func (r *http.Request) bool {return true},}).Upgrade(writer, request, nil)msg = make(chan []byte, 200)// 设置关闭处理器wsClient.SetCloseHandler(func (closeCode int,text string) error {isClose = truewsClient.Close()fmt.Println("关闭处理代码")return nil})//启用两个协程分别处理读取消息与写消息go read(wsClient, msg)go write(wsClient)})http.ListenAndServe("127.0.0.1:8010", nil)
}func read(ws *websocket.Conn, msg chan []byte)  {defer func() {if r := recover(); r != nil {fmt.Println("write stop", string(debug.Stack()), r)}}()for  {_, message , ok :=  ws.ReadMessage()if ok != nil {ws.Close()return}fmt.Println("读消息")fmt.Println(string(message))msg <- message}}/***/
func write(ws *websocket.Conn)  {defer func() {if r := recover(); r != nil {fmt.Println("write stop", string(debug.Stack()), r)}}()for {if isClose{break}select {case message , err  := <- msg:if !err {ws.Close() // 关闭连接fmt.Println("断开连接")return}fmt.Println("写消息")_ = ws.WriteMessage(websocket.TextMessage, message)fmt.Println("读取客户端数据 处理:", string(message))}// 处理程序}//fmt.Println(err)
}

golang websocket简单实现相关推荐

  1. golang websocket 聊天室demo

    近期偶然的机会看到一些go的websocket技术方案,顺便写了个demo,玩了一下: 首先安装websocket包 go get code.google.com/p/go.net/websocket ...

  2. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  3. Golang实现简单爬虫框架(4)——队列实现并发任务调度

    前言 在上一篇文章<Golang实现简单爬虫框架(3)--简单并发版>中我们实现了一个最简单并发爬虫,调度器为每一个Request创建一个goroutine,每个goroutine往Wor ...

  4. nsq Android客户端,NSQ的golang客户端简单使用

    NSQ的golang客户端简单使用 NSQ 是由国外的一个短链服务商bitly使用golang开发的一个消息队列系统,正好使用到了这个东西,在这里简单的记录下. 获取客户端 nsq的golang客户端 ...

  5. WebSocket简单使用(二) - 客户端

    WebSocket简单使用(二) - 客户端 原文 http://www.oseye.net/user/kevin/blog/79 关于WebSocket我打算分如下几篇博文来探探路: WebSock ...

  6. Golang实现简单爬虫框架(5)——项目重构与数据存储

    前言 在上一篇文章<Golang实现简单爬虫框架(4)--队列实现并发任务调度>中,我们使用用队列实现了任务调度,接下来首先对两种并发方式做一个同构,使代码统一.然后添加数据存储模块. 注 ...

  7. Golang编写简单图片服务器

    Golang编写简单图片服务器 图片服务器 最近的开发过程中,遇到一个问题,就是大量零碎图片的存储,最后我决定研究一个简单的图像服务器,以解决图像文件存储的性能问题.在此,写一篇博文记录我经历的思想过 ...

  8. golang从简单的即时聊天来看架构演变

    前言 俗话说的好,架构从来都不是一蹴而就的,没有什么架构一开始设计就是最终版本,其中需要经过很多步骤的变化,今天我们就从一个最简单的例子来看看,究竟架构这个东西是怎么变的. 我将从一个最简单的聊天室的 ...

  9. golang websocket绑定用户_Golang(五)最佳Web框架对比

    Golang是一门快速增长的语言,专为构建简单.快速且可靠的软件而设计.它提供的net/http库对于HTTP协议实现非常好,基于此再构造框架会更容易,因此生态中出现了很多框架.本文将从流行度.社区支 ...

最新文章

  1. xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance(xsi:schemaLocation详解)
  2. VC实现最小化后在系统托盘显示
  3. Linux下如何抓取串口码流,linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系...
  4. AE 中的查找与定位,以城市查找为例
  5. 50 SD配置-定价配置-定义存取顺序
  6. Javascript实现的倒计时时钟
  7. 协议--SIP/SDP
  8. torch.cuda.is_available()返回false——解决办法
  9. CentOS7下ldap的安装
  10. Words study
  11. Web——HTML常见标签及用法
  12. 整样运用计算机考试,计算机一级考试Word的十个应用技巧
  13. 一个机器人教小八_哈工程学生研发的水下机器人“敖小八”亮相浙江卫视
  14. 大数据分析的方法有几种?
  15. 为什么在室内4G信号会变弱
  16. 调用腾讯sdk将当前经纬度换算出省市区
  17. bzoj2208 [Jsoi2010]连通数 强连通分量缩点+拓扑排序+bitset
  18. java数据查询_数据的查询
  19. 使用python实现向图片添加高斯噪声
  20. [Python]学以致用爬取豆瓣小组租房信息

热门文章

  1. Node.js入门(一)
  2. 公众号榜单 | 2020·5月公众号地区排行榜重磅发布
  3. 用计算机语言写结婚祝福语,抖音很火的一到10结婚祝福语
  4. Autodesk AutoCAD Mac版卸载教程
  5. 如何模拟苹果官网高端大气上档次的产品视频演示
  6. 开发新闻类APP需要准备什么
  7. 设置计算机电源方案20分钟后,屏保为什么我的电脑在20分左右不操作会自动 – 手机爱问...
  8. 离散数学班委成员选举,王小红,李强,丁金生,python实现
  9. centos7 通过端口转发实现代理中转
  10. git tag 标签重命名