Golang语言社区--wesocket的demo(包括H5前端,GO后端)

go代码:

package main
import (
        "flag"
        "fmt"
        "glog-master"
        "net/http"
        "code.google.com/p/go.net/websocket"
)
// 初始化函数
func init() {
        fmt.Println("Entry init")
        // 连接池的  初始化; 数据结构的初始化;
        PlayerBuShu = make(map[string]int)
        H5_Data = make(map[string]*OnlineUser)
        flag_h5 = 0
        flag.Set("alsologtostderr", "true") // 日志写入文件的同时,输出到stderr
        flag.Set("log_dir", "./tmp")        // 日志文件保存目录
        flag.Set("v", "3")                  // 配置V输出的等级。
        flag.Parse()
        return
}
// 主函数
func main() {
        glog.Info("main")
        fmt.Println("Entry main")
        http.Handle("/Golangweb", websocket.Handler(BuildConnection))
        if err := http.ListenAndServe(":7821", nil); err != nil {
                fmt.Println("main err:", err.Error())
                return
        }
        return
}
func BuildConnection(ws *websocket.Conn) {
        data := ws.Request().URL.Query().Get("data")
        if data == "" {
                fmt.Println("data is nil!!!")
                //return
        }
        // 接受到的 客户端的数据
        fmt.Println("data:", data)
        // 处理-- 用户的登陆  用户的基础行为(走路 , 开枪 ,死亡 等等)
        onlineUser := &OnlineUser{
                Connection: ws,
        }
        onlineUser.PullFromClient()
}
func (this *OnlineUser) PullFromClient() {
        fmt.Println("PullFromClient")
        for {
                var content string
                if err := websocket.Message.Receive(this.Connection, &content); err != nil {
                        break
                }
                if len(content) == 0 {
                        break
                }
                glog.Info("data:", content)
        }
}
H5代码:
<!DOCTYPE html>
<meta charset="utf-8" />
<title>Golang 语言社区 (www.Golang.Ltd)</title>
<body>
        <h3 style="color: cornflowerblue;">Golang 语言社区 </h3> 用户名: <input type='text' id='name' value="yulegame">
        <input type="submit" onclick="login()" />
</body>
<script language="javascript" type="text/javascript">
        var wsUri = "ws://127.0.0.1:7821/Golangweb?data={'Protocol':3,'Protocol2':1,'OpenID'='ww'}";
        var goServerJson;
        var json;
        function login() {
                var test;
                test = document.getElementById("name").value
                alert(test);
                var json = {
                        Protocol: 1,
                        Protocol2: 3,
                };
                var goServerJson = JSON.stringify(json);
                wsUri = wsUri;
                console.log(wsUri);
                doSend(goServerJson);
        }
        //////////////////////////////////////////////////////////////////
        var output;
        var websocket1;
        function init() {
                output = document.getElementById("output");
                testWebSocket();
        }
        function testWebSocket() {
                console.log(wsUri)
                websocket1 = new WebSocket(wsUri);
                websocket1.onopen = function(evt) {
                        onOpen(evt)
                };
                websocket1.onclose = function(evt) {
                        onClose(evt)
                };
                websocket1.onmessage = function(evt) {
                        onMessage(evt)
                };
                websocket1.onerror = function(evt) {
                        onError(evt)
                };
        }
        function onOpen(evt) {
                writeToScreen("CONNECTED");
        }
        function onClose(evt) {
                writeToScreen("DISCONNECTED");
        }
        function onMessage(evt) {
                var data = evt.data;
                console.log("data=" + data);
                var d = base64decode(data);
                var zhuana = utf8to16(d);
                writeToScreen('<span style="color: blue;">RESPONSE: ' + zhuana + '</span>');
        }
        function onError(evt) {
                writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
        }
        function doSend(message) {
                writeToScreen("SENT: " + message);
                writeToScreen('<span style="color: blue;">RESPONSE: ' + base64encode(message) + '</span>');
                websocket1.send(message);
        }
        function writeToScreen(message) {
                var pre = document.createElement("p");
                pre.style.wordWrap = "break-word";
                pre.innerHTML = message;
                output.appendChild(pre);
        }
        window.addEventListener("load", init, false);
</script>
<script src="js/luanma.js"></script>
<div id="output"></div>

服务器日志截图:

代码下载链接:http://www.golang.ltd/forum.php?mod=viewthread&tid=5992

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端吧啦吧啦

手把手教你全家桶之React(二)

12430
来自专栏java架构师

Web开发中的文件上传组件uploadify的使用

在Web开发中,有很多可以上传的组件模块,利用HTML的File控件的上传也是一种办法,不过这种方式,需要处理的细节比较多,而且只能支持单文件的操作。在目前We...

30050
来自专栏Kiba518

【我们一起写框架】MVVM的WPF框架之绑定(二)

上一篇我们已经一起编写了框架的基础结构,并且实现了ViewModel反向控制Xaml窗体。

16520
来自专栏Pythonista

Golang之Mysql事务

39320
来自专栏静默虚空的博客

Eclipse 使用小结

代码智能提示 Java智能提示 Window -> Preferences -> Java -> Editor -> Content Assist -> Aut...

24260
来自专栏西安-晁州

rabbitmq消息队列——"工作队列"

二、”工作队列” ? 在第一节中我们发送接收消息直接从队列中进行。这节中我们会创建一个工作队列来分发处理多个工作者中的耗时性任务。 工作队列主要是为了避免进行一...

42400
来自专栏Android 开发学习

TabLayout double click 标题回顶部

18320
来自专栏程序员的诗和远方

TypeScript 中使用 CSS Modules

CSS 的全局性 相当长一段时间 CSS 总是在页面上作为一个全局的存在,以前这个『特性』影响还不算很大,命名上注意一点,比如使用 BEM 也能一定程度上解决问...

59070
来自专栏林德熙的博客

win10 uwp 显示SVG win2d 使用 svg

这些图片在http://www.zcool.com.cn/下载,不知道是不是不能直接用

21610
来自专栏祝威廉

React问题三则

这两天在用 Blueprint+React+ServiceFramework+MySQL 为主要组件开发一个小玩具,由衷的喜欢React了。为啥呢?非常后端,其...

8810

扫码关注云+社区

领取腾讯云代金券