本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 转载请必须注明出处!

1。关于websocket

HTML5定义了WebSocket协议,能更好的节省server资源和带宽并达到实时通讯。
在JavaEE7中也实现了WebSocket协议。
在 WebSocket API,浏览器和server仅仅须要要做一个握手的动作。然后,浏览器和server之间就形成了一条高速通道。

两者之间就直接能够数据互相传送。

參考:
http://baike.baidu.com/link?

url=gSdXNTHdO4W0jS-lqdo3VOL0VDTyTh7YLXV1amAT5cEsMIgn5u0Sbay4fMJeqOiX4vaWn9E4ttit3Dxv2A_KGK

2,安装websocket

使用的golang官方的net包以下的websocket,地址:
https://github.com/golang/net

首先设置go_path变量,參考:
http://blog.csdn.net/freewebsys/article/details/46695513

下载net包,安装websocket模块

#所有模块下载
go get github.com/golang/net
#做下软连接把github目录以下的映射到golang.org下,否则其它模块如html安装不上。
ln -s /usr/local/go_path/src/github.com/golang/net /usr/local/go_path/src/golang.org/x/net
#安装websocket模块
go install golang.org/x/net/websocket

这个模块的包结构都统一成golang.org/x/net。使用import “golang.org/x/net/websocket”引入。

文档在:(godoc是很不错的站点,所有golang的文档都在上面。


https://godoc.org/golang.org/x/net/websocket

3。代码和执行

代码:
https://github.com/golang-samples/websocket
server代码:终于还是挂在httpserver上面的。

package mainimport ("golang.org/x/net/websocket""fmt""log""net/http"
)func echoHandler(ws *websocket.Conn) {msg := make([]byte, 512)n, err := ws.Read(msg)if err != nil {log.Fatal(err)}fmt.Printf("Receive: %s\n", msg[:n])send_msg := "[" + string(msg[:n]) + "]"m, err := ws.Write([]byte(send_msg))if err != nil {log.Fatal(err)}fmt.Printf("Send: %s\n", msg[:m])
}func main() {http.Handle("/echo", websocket.Handler(echoHandler))http.Handle("/", http.FileServer(http.Dir(".")))err := http.ListenAndServe(":8080", nil)if err != nil {panic("ListenAndServe: " + err.Error())}
}

clientwebsocket调用代码:

package mainimport ("golang.org/x/net/websocket""fmt""log"
)var origin = "http://127.0.0.1:8080/"
var url = "ws://127.0.0.1:8080/echo"func main() {ws, err := websocket.Dial(url, "", origin)if err != nil {log.Fatal(err)}message := []byte("hello, world!你好")_, err = ws.Write(message)if err != nil {log.Fatal(err)}fmt.Printf("Send: %s\n", message)var msg = make([]byte, 512)m, err := ws.Read(msg)if err != nil {log.Fatal(err)}fmt.Printf("Receive: %s\n", msg[:m])ws.Close()//关闭连接
}

client使用websocket.Dial(url, “”, origin) 进行websocket连接,可是origin參数并没有实际调用。
使用websocket进行数据的发送和接受。

很有意思的事情是,假设client和服务端都是用go写,用的都是websocket这个对象。

函数调用都是一样的。仅仅只是一个写一个读数据而已。

4。html5调用

使用jquery了。用百度的cdn:
http://cdn.code.baidu.com/
html5页面代码:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"/><title>Sample of websocket with golang</title><script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script>$(function() {var ws = new WebSocket("ws://localhost:8080/echo");ws.onmessage = function(e) {$('<li>').text(event.data).appendTo($ul);};var $ul = $('#msg-list');$('#sendBtn').click(function(){var data = $('#name').val();ws.send(data);});});</script>
</head>
<body>
<input id="name" type="text"/>
<input type="button" id="sendBtn" value="send"/>
<ul id="msg-list"></ul>
</body>
</html>

当点击button按钮之后,websocket收到onmessage事件,然后把数据显示到页面。

浏览器显示websocket连接状态。

5,总结

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 转载请必须注明出处!

使用golang开发websocket很easy。
很方便。由于nodejs做server的时候会出现server负载突然高的情况。并且nodejs的库很杂和多,解决起来可能比較麻烦。

我还是比較倾向于用golang开发。

golang(5):编写WebSocket服务,client和html5调用相关推荐

  1. BeetleX实现MessagePack和Protobuf消息控制器调用websocket服务详解

    最近有用户问如何使用BeetleX封装一个基于Protobuf格式的websocket服务并支持控制器调用:其实BeetleX.FastHttpApi是支持Websocket服务和自定义数据格式的,但 ...

  2. websocket server client 编写

    websocket server client 编写 根据RFC文档编写 网络七层简单介绍 websocket 的好处 传输层 websocket应用层协议 根据RFC文档编写 从网络七层开始,写出一 ...

  3. 在Apache上搭建pywebsocket提供html5的websocket服务

    参考:http://www.travisglines.com/web-coding/how-to-set-up-apache-to-serve-html5-websocket-applications ...

  4. 使用websocket-sharp来创建c#版本的websocket服务

    当前有一个需求,需要网页端调用扫描仪,javascript不具备调用能力,因此需要在机器上提供一个ws服务给前端网页调用扫描仪.而扫描仪有一个c#版本的API,因此需要寻找一个c#的websocket ...

  5. 一起来用Websocket(一)开篇 Websocket!Socket在HTML5复活

    一起来用Websocket(一)开篇 Websocket!Socket在HTML5复活    前言  HTML5中有一个比较好用的特性,就是Websocket.现在已集成在chrome的较新版本中.由 ...

  6. 使用SpringBoot搭建一个简单的webSocket服务

    前言 个人地址:使用SpringBoot搭建一个简单的webSocket服务 什么是WebSocket? WebSocket是一个HTML5新增的协议,它的目的在浏览器和服务器之间建立一个不受限的双向 ...

  7. 【转】使用websocket-sharp来创建c#版本的websocket服务

    当前有一个需求,需要网页端调用扫描仪,javascript不具备调用能力,因此需要在机器上提供一个ws服务给前端网页调用扫描仪.而扫描仪有一个c#版本的API,因此需要寻找一个c#的websocket ...

  8. java编写websocket客户端

    前言 webSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据. 本次介绍的是websocket客户端的编写,至于websocket服务端的编写可以看我之前写的 ...

  9. websocket服务端和html客户端进行二进制数据交互

    一.概念和理论理解 1.HTTP HTTP 是基于请求响应式的,即通信只能由客户端发起,服务端做出响应,无状态,无连接. 无状态:每次连接只处理一个请求,请求结束后断开连接. 无连接:对于事务处理没有 ...

最新文章

  1. solaris系统的网卡配置
  2. 那些年送出去的交互方案-微博篇
  3. 云炬Android开发报错处理教程 解决Android Studio kotlin等依赖下载慢,下载超时失败的问题
  4. new JSONArray(ListMap).tostring()问题
  5. Spring Data Redis:Sentinel的高可用性
  6. 计算机网络(五)——组建客户机/服务器网络
  7. 《DSP using MATLAB》示例Example 8.5
  8. 流媒体 - UVC 协议
  9. Busybox下tftp命令使用详解
  10. 2018-7月最新QQ坦白说破解方法(亲测有效!)
  11. Oracle 11g 新特性 -- Online Patching (Hot Patching 热补丁)说明
  12. JAVA面试题整理2020
  13. 十一道家常小菜详细攻略[图文并茂]
  14. 如何将国外的ftp气象大数据下载回来(by quqi99)
  15. Learning Memory-guided Normality for Anomaly Detection 代码解析
  16. 计算机教学学期小结,学年第一学期信息技术教学工作总结
  17. java matcher group方法_Java中正则表达式相关类中Matcher.group()方法
  18. UVA 1262 Password
  19. mysql本周 下周下月,mysql 日期计算,今天,明天,本周,下周,本月,下月
  20. 一本通 1.5.3 字符数组

热门文章

  1. JavaScript(三)——函数、变量作用域、方法
  2. android layout过程分析,Andriod 从 0 开始自定义控件之 View 的 layout 过程 (八)
  3. Win32串口操作的技巧
  4. I9 9900K线程_9900k配什么主板
  5. 8分钟答辩稿_干货 | 论文答辩,该掌握哪些技巧?
  6. 重新定义智能平板电脑 第四范式与联想达成战略合作
  7. 第四范式入选Gartner 2020十大战略技术趋势报告 成全球AutoML代表厂商
  8. erlang精要(16)-匿名函数之sigmoid函数实现
  9. c++17(6)-数学 函数
  10. 【NLP】大模型时代,我们真的不再需要分词了吗?