我们通过使用如下库创建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. mysql 授权命令

    MySQL 数据库赋予用户权限操作表   MySQL清空数据库的操作:truncate table tablename; MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库 ...

  2. Extjs实现Grid表格显示【一】

    Ext.onReady(function(){ // Ext.Msg.alert("提示","hello world!! "); var stu =new Ex ...

  3. ORACLE表空间操作实例

    本文主要介绍oracle表空间常见的操作实例,包括创建.查询.增加.删除.修改.表空间和数据文件常用的数据字典和动态性能视图包括v$dbfile.v$datafile.v$tempfile.dba_s ...

  4. Spring3.0学习1.2(使用annotation)

    使用annotation 首先 xml文件更改  新加xslt <?xml version="1.0" encoding="UTF-8"?> < ...

  5. C++ 学习 之Struct

    转自https://blog.csdn.net/bestconvenient/article/details/30734139 最开始,就让我们来讨论一下一个最最基本,也最最容易被人忽视掉的问题——C ...

  6. gdufe1538-是男人就上100层-(三维bfs)

    Problem Description: 桐老爷和UGO终于来到了名为“是男人就上一百层的塔”的下面,听说大祭司在第100层沉睡.为了题目需要,我把这个塔的层数随机打乱,层数的话大家就忘了前面的100 ...

  7. Sql中EXISTS与IN的使用及效率

    in 和exists 对于以上两种查询条件,in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询. 一直以来认为exists 比in 效率高 ...

  8. Restrict & Cascade

    [Restrict & Cascade] 参考:https://my.oschina.net/cart/blog/277624

  9. CRTD模拟MFG工单进行绑定优化

    需求:按单按库生产的CRTD状态半成品工单重复创建问题 绑定成功案例: SELECT DEMANDLINEID,SUPPLYORDERID,DEMANDORDERID,QTYALLOCATED,ITE ...

  10. Appium1.6启动ios9.3报错Original error: Sdk '9.3.5' was not in list of simctl sdks

    问题: 使用Apppium1.6启动ios9.3报错Original error: Sdk '9.3.5' was not in list of simctl sdks   我的启动配置如下 {   ...