go java websocket_golang(5):编写WebSocket服务,client和html5调用

本文介绍了如何在JavaEE7中利用WebSocket协议进行实时通信,并重点讲述了在Go语言中安装和使用websocket库进行服务器和客户端的搭建。通过示例代码展示了服务器端的echoHandler函数以及客户端的连接和数据收发过程,强调了Go语言实现WebSocket的简洁性和高效性。此外,还提及了HTML5页面使用jQuery调用WebSocket的示例。

1。关于websocket

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

在JavaEE7中也实现了WebSocket协议。

在 WebSocket API,浏览器和server仅仅须要要做一个握手的动作。然后,浏览器和server之间就形成了一条高速通道。

两者之间就直接能够数据互相传送。

2,安装websocket

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

https://github.com/golang/net

下载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。代码和执行

package main

import (

"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())

}

}

clientwebsocket调用代码:

package main

import (

"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()//关闭连接

}

client使用websocket.Dial(url, “”, origin) 进行websocket连接,可是origin參数并没有实际调用。

使用websocket进行数据的发送和接受。

很有意思的事情是,假设client和服务端都是用go写,用的都是websocket这个对象。

函数调用都是一样的。仅仅只是一个写一个读数据而已。

4。html5调用

使用jquery了。用百度的cdn:

http://cdn.code.baidu.com/

html5页面代码:

Sample of websocket with golang

var ws = new WebSocket("ws://localhost:8080/echo");

ws.onmessage = function(e) {

$('

').text(event.data).appendTo($ul);

};

var $ul = $('#msg-list');

$('#sendBtn').click(function(){

var data = $('#name').val();

ws.send(data);

});

});

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

3ae73bfdfe98b244fdf9b68d86429f3f.png

浏览器显示websocket连接状态。

377ca671087483dac0d7e4523f36f31a.png

5,总结

使用golang开发websocket很easy。

很方便。由于nodejs做server的时候会出现server负载突然高的情况。并且nodejs的库很杂和多,解决起来可能比較麻烦。

我还是比較倾向于用golang开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值