服务器
package main
import (
"bufio"
"fmt"
"net/http"
"os"
//"time"
"github.com/gorilla/websocket"
)
var (
up = websocket.Upgrader{
// 检查区域 可以自行设置是POST 或者GET请求 还有URL等信息 这里直接设置表示都接受
CheckOrigin: func(r *http.Request) bool {
return true
},
}
) //升级器函数
func httphandle(resp http.ResponseWriter, req *http.Request) {
//升级为websocket
var conn *websocket.Conn
var err error
conn, err = up.Upgrade(resp, req, nil)
if err != nil {
fmt.Println("upgrede failed")
return
} else {
fmt.Println("now is websocket")
}
//开启写协程
go func() {
for {
r, _ := bufio.NewReader(os.Stdin).ReadString('\n')
if err := conn.WriteMessage(websocket.TextMessage, []byte(r)); err != nil {
return
}
//time.Sleep(1 * time.Second)
}
}()
//读协程
for {
_, data, err := conn.ReadMessage()
if err != nil {
goto ERR
} else {
fmt.Println(string(data))
}
}
ERR:
conn.Close()
}
//ResponseWriter 发送给客户端的响应信息
//http.Request 客户端请求体
func main() {
/*服务器启动程序*/
//开启http服务
http.HandleFunc("/", httphandle)
/*第一个参数指的是请求路径,第二个参数是一个函数类型,表示这个请求需要处理的事情
第二个参数为一个接口 接口具有ServeHTTP(w http.ResponseWriter, r *http.Request)函数*/
//监听服务
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println("ListenAndServe: ", err)
}
}
客户端:
<!DOCTYPE html>
<html>
<head>
<title>go websocket</title>
<meta charset="utf-8" />
</head>
<body>
<script type="text/javascript">
var wsUri ="ws://127.0.0.1:8080/ws";
var output;
function init() {
output = document.getElementById("output");
testWebSocket();
}
function testWebSocket() {
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt) {
onOpen(evt)
};
websocket.onclose = function(evt) {
onClose(evt)
};
websocket.onmessage = function(evt) {
onMessage(evt)
};
websocket.onerror = function(evt) {
onError(evt)
};
}
function onOpen(evt) {
writeToScreen("CONNECTED");
// doSend("WebSocket rocks");
}
function onClose(evt) {
writeToScreen("DISCONNECTED");
}
function onMessage(evt) {
writeToScreen('<span style="color: blue;">RESPONSE: '+ evt.data+'</span>');
// websocket.close();
}
function onError(evt) {
writeToScreen('<span style="color: red;">ERROR:</span> '+ evt.data);
}
function doSend(message) {
writeToScreen("SENT: " + message);
websocket.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);
function sendBtnClick(){
var msg = document.getElementById("input").value;
doSend(msg);
document.getElementById("input").value = '';
}
function closeBtnClick(){
websocket.close();
}
</script>
<h2>WebSocket Test</h2>
<input type="text" id="input"></input>
<button onclick="sendBtnClick()" >send</button>
<button onclick="closeBtnClick()" >close</button>
<div id="output"></div>
</body>
</html>