我们通过使用如下库创建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调用的更多相关文章

  1. golang(5):编写WebSocket服务,client和html5调用

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 转载请必须注明出处! 1.关于websocket HTML5定义了 ...

  2. html5调用手机摄像头,实现拍照上传功能

    今天做手机网站,想实现手机扫描二维码功能.首先实现在浏览器中调用手机摄像头,实现拍照功能并且把拍下的照片显示在页面并上传到服务器上,然后再在服务器端进行分析. 首先实现在浏览器中调用摄像头,当然用现在 ...

  3. WebSocket 开发模拟客户端与有游戏服务器通信

    WebSocket 客户端测试功能 websocket是有标准的通信协议,在h2engine服务器引擎中继承了websocket通信协议,使用websocket通信协议的好处是很多语言或框架都内置了w ...

  4. Axis2 WebService客户端Axis2调用

    第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 package samples.quickstart.client; ...

  5. TCP/UDP client/server library for Java, 最好的java语言tcp udp 服务器客户端实现库

    这个库andrdoi也可以用,而且是基于类的使用方式: 它支持类似聊天室的功能,即一个人说话,所有客户端都能收到,当然也支持点点通信.它还支持 RMI 的方式调用远程过程. https://githu ...

  6. 跨越语言的障碍:C++/CLI 调用 C#

    首先我想投诉一下博客园首页右边栏的广告..最近总是出现很恐怖的整容脸的广告.真的是吓坏了.=.=大家有同感吗? 博客园前一阵子掀起了语言的广泛讨论,事实上语言的争执在整个程序员圈子也没有停止过.以我个 ...

  7. WCF服务客户端首页调用慢的问题处理

    场景: WCF服务架设于IIS服务中,走TCP协议.客户端首次调用特别慢,第一次加载完后,都正常. 解决: 把服务中需要序列化的模型所在的工程 > 属性 > 生成 > 生成序列化程序 ...

  8. html5调用手机相机并压缩、上传

    近日刚做的一个功能,要在app里使用内嵌页面进行图像的上传.从功能上看,原生的实现应该是最好的.毕竟页面上所有的东西都隔着一个浏览器,所有的实现都要依赖浏览器提供的接口,不同的浏览器对接口的实现又有差 ...

  9. WCF初探-11:WCF客户端异步调用服务

    前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...

随机推荐

  1. zstack使用笔记之端口转发

    根据官方教程,使用端口转发,可以把公网流量转发到内网 实验环境是这样的 公网网段:172.17.3.x 内网网段:192.168.1.x 首先创建云路由网络,这个就不说了,根据教程大家都可以创建出来, ...

  2. OGNL表达式(转载)

    OGNL表达式(转载)   1.什么是OGNL OGNL:Object Graphic Navigation Language(对象图导航语言) 它是Struts2中默认的表达式语言.使用表达式需要借 ...

  3. RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介(转载)

    RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介 今天这篇博文是我翻译的RabbitMQ的最后一篇文章了,介绍一下RabbitMQ的C#开发的接口.好了,言归正传吧. N ...

  4. ADO.NET基础知识

    ADO.NET定义 ADO是ActiveX Data Objects的缩写,ADO.NET是数据库应用程序和数据源之间沟通的桥梁,主要提供一个面向对象的数据访问架构,用来开发数据库应用程序,就是一组类 ...

  5. Node稳定性的研究心得

    目前大部分Web服务器,如Apache,都使用多线程的方式响应多用户请求,即一个线程服务一个用户请求.这种模式其中一个好处是,当某个请求的线程上抛出的异常没被捕获,只会影响当前这个线程,不会影响其他请 ...

  6. Oracle存储过程中使用临时表

    一.Oracle临时表知识 在Oracle中,临时表分为SESSION.TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION:而 TRANSA ...

  7. adb INSTALL_FAILED_UPDATE_INCOMPATIBLE

    今天用Eclipse运行项目时出错: LOG: [2018-05-09 14:16:19 - Module_Android_Demo] ------------------------------ [ ...

  8. 16.Set、List、Queue集合;Map.md

    目录 1.Set 1.2HashSet TreeSet 2.List 2.1ArrayList 2.1.1ArrayList和Vector的区别 2.2LinkedList 3.Queue 4.各种线 ...

  9. 学习JS的心路历程-参数传递方式(上)

    很多人认为JS的传递方式是值是Call by value, 物件及数组是Call by Reference.甚至还有人宣称其实JS是Call by sharing,那到底是哪一个呢? 这两天我们一一来 ...

  10. Html----编写

    文档的编辑 选择文档---->修改文档后缀名(.thml)--->用浏览器打开(解释和执行HTML源代码的工具) 浏览器主要分类及内核 火狐(Firefor)--->Gecho IE ...