加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

go语言websocket使用与客户端html5调用

发布时间:2020-12-16 18:02:24 所属栏目:大数据 来源:网络整理
导读:我们通过使用如下库创建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//如果无法下载,请到下面的地址去下载//h

我们通过使用如下库创建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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读