go语言websocket使用与客户端html5调用
我们通过使用如下库创建websocket服务
go get golang.org/x/net/websocket
websocket服务端的代码如下:
package main; import (
"golang.org/x/net/websocket"
"net/http"
"log"
"fmt"
) //使用golang.org/x/net/websocket
//如果无法下载,请到下面的地址去下载
//http://www.golangtc.com/download/package
//http://gopm.io/ type Msg struct {
From string;
To string;
Data string;
} //处理简单的字符串
func test(conn *websocket.Conn) {
var err error;
for {
data := "";
//接收消息
err = websocket.Message.Receive(conn, &data);
if err != nil {
break;
}
fmt.Println("client send: " + data); msg := "hello " + data;
//发送消息
err = websocket.Message.Send(conn, msg);
if err != nil {
break;
}
}
} //处理JSON数据
func test2(conn *websocket.Conn) {
var err error;
for {
var data Msg;
//接收消息
err = websocket.JSON.Receive(conn, &data);
if err != nil {
break;
}
fmt.Println(data.From, data.To, data.Data); msg := Msg{
From: data.From,
To: data.To,
Data: "hello " + data.Data,
};
//发送消息
err = websocket.JSON.Send(conn, msg);
if err != nil {
break;
}
}
} func main() {
//http.Handle("/", websocket.Handler(test));
http.Handle("/", websocket.Handler(test2));
err := http.ListenAndServe(":8080", nil);
if err != nil {
log.Fatal(err);
}
}
html客户端代码如下:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>websocket</title>
</head>
<body>
<form>
<input type="text" id="msg">
<input type="submit" id="sendBtn" value="发送">
</form>
<div id="result"></div>
<script type="text/javascript">
var url = "ws://127.0.0.1:8080";
var ws = new WebSocket(url);
//ws打开时
ws.onopen = function() {
console.log("connect ...");
};
//ws连接关闭时
ws.onclose = function() {
console.log("close");
};
//监听服务器推送数据
ws.onmessage = function(ev) {
var result = document.getElementById("result");
result.innerHTML = result.innerHTML + "<p>" + ev.data + "</p>";
}; document.getElementById("sendBtn").onclick = function() {
var msg = document.getElementById("msg").value;
if(msg.length == 0) {
alert("不能为空");
}
//发送数据
ws.send(msg);
return false;
};
</script>
</body>
</html>


json格式:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>websocket</title>
</head>
<body>
<form>
<input type="text" id="msg">
<input type="submit" id="sendBtn" value="发送">
</form>
<div id="result"></div>
<script type="text/javascript">
var url = "ws://127.0.0.1:8080";
var ws = new WebSocket(url);
//ws打开时
ws.onopen = function() {
console.log("connect ...");
};
//ws连接关闭时
ws.onclose = function() {
console.log("close");
};
//监听服务器推送数据
ws.onmessage = function(ev) {
var result = document.getElementById("result");
var data = eval("(" + ev.data + ")");
result.innerHTML = result.innerHTML + "<p>" + data.From + "发送" + data.To + ":" + data.Data + "</p>";
}; document.getElementById("sendBtn").onclick = function() {
var msg = document.getElementById("msg").value;
if(msg.length == 0) {
alert("不能为空");
}
//发送数据
//注意这里JOSN的拼接,key和value要用双引号,否则go无法解析
ws.send('{"From":"小张","To":"小王","Data":"' + msg + '"}');
return false;
};
</script>
</body>
</html>


go语言websocket使用与客户端html5调用的更多相关文章
- golang(5):编写WebSocket服务,client和html5调用
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 转载请必须注明出处! 1.关于websocket HTML5定义了 ...
- html5调用手机摄像头,实现拍照上传功能
今天做手机网站,想实现手机扫描二维码功能.首先实现在浏览器中调用手机摄像头,实现拍照功能并且把拍下的照片显示在页面并上传到服务器上,然后再在服务器端进行分析. 首先实现在浏览器中调用摄像头,当然用现在 ...
- WebSocket 开发模拟客户端与有游戏服务器通信
WebSocket 客户端测试功能 websocket是有标准的通信协议,在h2engine服务器引擎中继承了websocket通信协议,使用websocket通信协议的好处是很多语言或框架都内置了w ...
- Axis2 WebService客户端Axis2调用
第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 package samples.quickstart.client; ...
- TCP/UDP client/server library for Java, 最好的java语言tcp udp 服务器客户端实现库
这个库andrdoi也可以用,而且是基于类的使用方式: 它支持类似聊天室的功能,即一个人说话,所有客户端都能收到,当然也支持点点通信.它还支持 RMI 的方式调用远程过程. https://githu ...
- 跨越语言的障碍:C++/CLI 调用 C#
首先我想投诉一下博客园首页右边栏的广告..最近总是出现很恐怖的整容脸的广告.真的是吓坏了.=.=大家有同感吗? 博客园前一阵子掀起了语言的广泛讨论,事实上语言的争执在整个程序员圈子也没有停止过.以我个 ...
- WCF服务客户端首页调用慢的问题处理
场景: WCF服务架设于IIS服务中,走TCP协议.客户端首次调用特别慢,第一次加载完后,都正常. 解决: 把服务中需要序列化的模型所在的工程 > 属性 > 生成 > 生成序列化程序 ...
- html5调用手机相机并压缩、上传
近日刚做的一个功能,要在app里使用内嵌页面进行图像的上传.从功能上看,原生的实现应该是最好的.毕竟页面上所有的东西都隔着一个浏览器,所有的实现都要依赖浏览器提供的接口,不同的浏览器对接口的实现又有差 ...
- WCF初探-11:WCF客户端异步调用服务
前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...
随机推荐
- Haskell语言学习笔记(76)Data.Tree
Data.Tree data Tree a = Node { rootLabel :: a, subForest :: Forest a } deriving (Eq, Read, Show) typ ...
- C# 简单的定时关机
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- thinkphp的PHPexecl表格样式设置
/** * 以下是使用示例,对于以 //// 开头的行是不同的可选方式,请根据实际需要 * 打开对应行的注释. * 如果使用 Excel5 ,输出的内容应该是GBK编码. */ //require_o ...
- 如何遍历List对象
for(String str : list) {//其内部实质上还是调用了迭代器遍历方式,这种循环方式还有其他限制,不建议使用. System.out.println(str); } .普通for循环 ...
- 找某個ColumnName在那些Tables
想找ColumnName叫CRE_USR的欄位在那些Table呢? (For SQL Server) SELECT o.name, o.* FROM syscolumns c INNER JOIN s ...
- Python异常和调试.md
异常捕获 try 基本概念 我们使用try except来捕获异常,python的try except有几个特点: 不管函数内部嵌套几层,只要在try的范围内就可以被捕获.这句话的意思是一个函数被tr ...
- OCR技术浅探(转)
网址:https://spaces.ac.cn/archives/3785 OCR技术浅探 作为OCR系统的第一步,特征提取是希望找出图像中候选的文字区域特征,以便我们在第二步进行文字定位和第三步进行 ...
- CKfinder for java详解二:缩略图及图片上传的缩放
我们找到 <thumbs><enabled>true</enabled><url>�SE_URL%_thumbs/</url><dir ...
- Steering Behaviors
[Steering Behaviors] 1.Seek 下述的算法是一个基本Seek行为,但不带任何Steering输出的力.在该公式作用下,游戏个体的移动方式是直线型的,如果target的位置变了的 ...
- dns隧道 dns2tcpd
有些网络的防火墙设置只允许端口53的UDP流量,就不能通过tcp搭建隧道,这种情况下我们可以通过UDP搭建DNS隧道,通过搭建一个DNS服务器委派的子域,这个子域因为使我们自己搭建的主机,这时候就可以 ...