博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编写WebSocket服务,客户端和html5调用
阅读量:5908 次
发布时间:2019-06-19

本文共 2337 字,大约阅读时间需要 7 分钟。

1,关于websocket

HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。

在JavaEE7中也实现了WebSocket协议。
在 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
参考:

2,安装websocket

使用的golang官方的net包下面的websocket,地址:

首先设置go_path变量,参考:

下载net包,安装websocket模块

#全部模块下载go get github.com/golang/net#做下软连接把github文件夹下面的映射到golang.org下,否则其他模块如html安装不上。ln -s /usr/local/go_path/src/github.com/golang/net /usr/local/go_path/src/golang.org/x/net#安装websocket模块go install golang.org/x/net/websocket

这个模块的包结构都统一成golang.org/x/net。使用import “golang.org/x/net/websocket”引入。

文档在:(godoc是非常不错的网站,所有golang的文档都在上面。)

3,代码和运行

代码:

server代码:最终还是挂在http服务器上面的。

package mainimport (    "golang.org/x/net/websocket"    "fmt"    "log"    "net/http")func echoHandler(ws *websocket.Conn) {    msg := make([]byte, 512)    n, err := ws.Read(msg)    if err != nil {        log.Fatal(err)    }    fmt.Printf("Receive: %s\n", msg[:n])    send_msg := "[" + string(msg[:n]) + "]"    m, err := ws.Write([]byte(send_msg))    if err != nil {        log.Fatal(err)    }    fmt.Printf("Send: %s\n", msg[:m])}func main() {    http.Handle("/echo", websocket.Handler(echoHandler))    http.Handle("/", http.FileServer(http.Dir(".")))    err := http.ListenAndServe(":8080", nil)    if err != nil {        panic("ListenAndServe: " + err.Error())    }}

客户端websocket调用代码:

package mainimport (    "golang.org/x/net/websocket"    "fmt"    "log")var origin = "http://127.0.0.1:8080/"var url = "ws://127.0.0.1:8080/echo"func main() {    ws, err := websocket.Dial(url, "", origin)    if err != nil {        log.Fatal(err)    }    message := []byte("hello, world!你好")    _, err = ws.Write(message)    if err != nil {        log.Fatal(err)    }    fmt.Printf("Send: %s\n", message)    var msg = make([]byte, 512)    m, err := ws.Read(msg)    if err != nil {        log.Fatal(err)    }    fmt.Printf("Receive: %s\n", msg[:m])    ws.Close()//关闭连接}

客户端使用websocket.Dial(url, “”, origin) 进行websocket连接,但是origin参数并没有实际调用。

使用websocket进行数据的发送和接受。非常有意思的事情是,如果客户端和服务端都是用go写,用的都是websocket这个对象。函数调用都是一样的,只不过一个写一个读数据而已。

4,html5调用

使用jquery了。用百度的cdn:

html5页面代码:

    
Sample of websocket with golang

    当点击button按钮之后,websocket收到onmessage事件,然后把数据显示到页面。

    浏览器显示websocket连接状态。

    5,总结

    本文的原文连接是: 转载请必须注明出处!

    使用golang开发websocket非常简单。

    非常方便,因为nodejs做服务器的时候会出现服务器负载突然高的情况,而且nodejs的库非常杂和多,解决起来可能比较麻烦。
    我还是比较倾向于用golang开发。

    你可能感兴趣的文章
    monggo find insert remove update index
    查看>>
    Linux系统架构(LB—HA集群)-HA集群配置
    查看>>
    插入1w条数据不报错,但是插入2w条数据时候报错,为什么呢?
    查看>>
    开始写博客
    查看>>
    获得控件坐标
    查看>>
    shall 脚本-DHCP安装和配置
    查看>>
    js之正则表达式学习1
    查看>>
    iis 中存在的mine 类型与web.config 在次添加后,重复冲突
    查看>>
    转:BigDecimal 使用方法详解
    查看>>
    Mac OS X:实现移动硬盘在Mac OS与Windows的读写操作
    查看>>
    12月20日工作总结
    查看>>
    我的友情链接
    查看>>
    Linux磁盘分区之文件系统格式化
    查看>>
    toast的简单用法
    查看>>
    如何在Windows 2003中完全删除Exchange2007
    查看>>
    状态栏透明
    查看>>
    Cacti报警设置
    查看>>
    软件测试的误区-测试行业有前途吗?
    查看>>
    java 读写word java 动态写入 模板文件
    查看>>
    Handler内存泄露的改进(18)
    查看>>