直接使用官方子包可以实现websocket协议,

golang.org/x/net/websocket
如果在这个目录没有这个包就去github下载net库,放进这个目录$GOPATH/src/golang.org/x/net就行了
服务端代码:
  1. package main
  2.  
  3. import (
  4. "time"
  5. "log"
  6. "net/http"
  7. "golang.org/x/net/websocket"
  8. )
  9. func main(){
  10. http.HandleFunc("/",index)
  11. http.Handle("/websocket",websocket.Handler(instantMessage))
  12. log.Println("start server")
  13. err:=http.ListenAndServe(":1234",nil)
  14. log.Println(err)
  15. }
  16. func index(res http.ResponseWriter,req *http.Request){
  17. res.Write([]byte("hello world"))
  18. }
  19. func instantMessage(w *websocket.Conn) {
  20. var error error
  21. for {
  22. var reply string
  23. if error= websocket.Message.Receive(w,&reply);error!=nil{
  24. log.Println("接受消息失败",error)
  25. break
  26. }
  27. log.Println("客户端:",reply)
  28.  
  29. msg:="服务端:"+reply+time.Now().String()
  30. log.Println(msg)
  31. if error = websocket.Message.Send(w, msg); error != nil {
  32. log.Println("发送消息失败")
  33. break
  34. }
  35. }
  36. }

客户端代码:

  1. <html>
  2. <head>
  3. <title>好好学习</title>
  4. </head>
  5. <body>
  6. <script type="text/javascript">
  7. var sock = null;
  8. // var wsuri = "wss://127.0.0.1:8080"; //本地的地址 是可以改变的哦
  9. var wsuri = "ws://localhost:1234/websocket"; //本地的地址 是可以改变的哦
  10.  
  11. window.onload = function() {
  12. //可以看到客户端JS,很容易的就通过WebSocket函数建立了一个与服务器的连接sock,当握手成功后,会触发WebScoket对象的onopen事件,告诉客户端连接已经成功建立。客户端一共绑定了四个事件。
  13. console.log("开始了 onload");
  14. sock = new WebSocket(wsuri);
  15. //建立连接后触发
  16. sock.onopen = function() {
  17. console.log(" 建立连接后触发 connected to " + wsuri);
  18. }
  19. // 关闭连接时候触发
  20. sock.onclose = function(e) {
  21. console.log("关闭连接时候触发 connection closed (" + e.code + ")");
  22. }
  23. // 收到消息后触发
  24. sock.onmessage = function(e) {
  25. console.log("收到消息后触发 message received: " + e.data);
  26. document.getElementById('receive').innerHTML=e.data;
  27. }
  28. //发生错误的时候触发
  29. sock.onerror=function (e) {
  30. console.log("发生错误时候触发"+wsuri)
  31. }
  32. };
  33. //如果sock被关闭掉了 这里 也会报错的啊
  34. function send() {
  35. var msg = document.getElementById('message').value;
  36. sock.send(msg);
  37. };
  38. </script>
  39. <h1>客户端</h1>
  40. <form>
  41. <p>发送: </p>
  42. <textarea id="message" >我是陶士涵</textarea>
  43. <p>接收: </p>
  44. <textarea id="receive" ></textarea>
  45. </form>
  46. <button onclick="send();">给服务器发送消息</button>
  47. </body>
  48. </html>

[Go] 实现websocket服务端的更多相关文章

  1. C# WebSocket 服务端示例代码 + HTML5客户端示例代码

    WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...

  2. nodejs搭建简单的websocket服务端

    创建websocket服务端使用了nodejs-websocket ,首先要安装nodejs-websocket,在项目的目录下: npm install nodejs-websocket 1.搭建w ...

  3. WebSocket服务端

    http://blog.csdn.net/qq_20282263/article/details/54310737 C# 实现WebSocket服务端 原创 2017年01月10日 09:22:50 ...

  4. 用nodejs快速实现websocket服务端(带SSL证书生成)

    有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...

  5. asp.net网站作为websocket服务端的应用该如何写

    最近被websocket的一个问题困扰了很久,有一个需求是在web网站中搭建websocket服务.客户端通过网页与服务器建立连接,然后服务器根据ip给客户端网页发送信息. 其实,这个需求并不难,只是 ...

  6. Netty 搭建 WebSocket 服务端

    一.编码器.解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextW ...

  7. VB6+Winsock编写的websocket服务端

    早就写好了,看这方面资料比较少,索性贴出来.只是一个DEMO中的,没有做优化,代码比较草.由于没地方上传附件,所以只把一些主要的代码贴出来. 这只是服务端,不过客户端可以反推出来,其实了解了webso ...

  8. .NET 即时通信,WebSocket服务端实例

    即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s/限制x条消息)要么则限制用户数. 但稳 ...

  9. .NET实现WebSocket服务端即时通信实例

    即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s/限制x条消息)要么则限制用户数. 但稳 ...

随机推荐

  1. [TimLinux] JavaScript 模态框可拖动功能实现——节流版

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 介绍一款自己实现的rabbit轻量级组件和使用方法

    DotNetCore.RabbitMQ.Extensions介绍 这是一个 基于.NETStandard 2.0的Rabbit轻量级框架,可以让开发人员无需关注底层变动,专注编写业务代码,从而达到便捷 ...

  3. 【Web技术】286- 自定义错误及扩展错误

    英文:Ilya Kantor  译文:LeviDing https://zh.javascript.info/custom-errors 当我们在进行开发的时候,通常需要属于我们自己的错误类来反映任务 ...

  4. 制作Win10系统安装U盘和安装纯净版Win10

    重要提示 (以下为操作或安装前的必读提示) 1.准备8G或8G以上的U盘(32G以内).制作U盘会格式化U盘,此U盘内的数据需要提前备份至其他U盘或移动硬盘. 2.在格式化.删除分区和重新安装操作系统 ...

  5. layim手机版嵌入app

    感觉记忆力不行了,才做了就有点忘了.先简单做下记录... 遇到的问题 需要类似微信的语音发送功能 前端发送给后端,在mogodb中用二进制存储.后端取到数据发送给我的也是blob.前端拿到数据就变了. ...

  6. Java并发线程池到底设置多大?

    前言 在我们日常业务开发过程中,或多或少都会用到并发的功能.那么在用到并发功能的过程中,就肯定会碰到下面这个问题 并发线程池到底设置多大呢? 通常有点年纪的程序员或许都听说这样一个说法 (其中 N 代 ...

  7. 4个点说清楚Java中synchronized和volatile的区别

    作者 : Hollis 回顾一下两个关键字:synchronized和volatile 1.Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如sy ...

  8. CSS | 自适应两栏布局方法

    html代码: <div class="main"> <div class="left" style="background: #0 ...

  9. C# 派生和继承(派生类与基类)

    using System; using System.Collections.Generic; using System.Text; namespace 继承 { class Program { st ...

  10. View 的绘制过程

    配合Activity 从启动到布局绘制的简单分析 阅读 基本概念介绍 Activity:一个 Activity 是一个应用程序组件,提供一个屏幕,用户可以用来交互. View:所有视图控件的基类 Vi ...