匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

使用Golang实现Websocket编程

使用Golang实现Websocket编程

Websocket是一种在浏览器和服务器之间进行全双工通信的技术。在传统的HTTP通信中,浏览器只能向服务器发起请求,服务器在处理请求后会返回响应。但在Websocket中,浏览器和服务器之间建立了一个长连接,使得数据可以在双方之间实时传输。

本文将介绍如何使用Golang实现Websocket编程。我们将使用标准库中的`net/http`和`golang.org/x/net/websocket`包来完成这个任务。

准备工作

在开始之前,要确保你已经安装了Golang。如果还没有安装,可以参考这个链接来安装:https://golang.org/doc/install

接着我们来创建一个新的Go模块,首先创建一个文件夹:

```
mkdir websocket-demo
cd websocket-demo
```

然后执行下面的命令来初始化一个新的Go模块:

```
go mod init websocket-demo
```

这个命令将会创建一个`go.mod`文件,用来记录模块依赖关系。

实现Websocket服务器

现在我们开始实现Websocket服务器。创建一个`main.go`文件,并在其中添加如下代码:

```go
package main

import (
	"fmt"
	"golang.org/x/net/websocket"
	"net/http"
)

func main() {
	http.Handle("/ws", websocket.Handler(wsHandler))
	fmt.Println("Server started at http://localhost:8080")
	http.ListenAndServe(":8080", nil)
}

func wsHandler(ws *websocket.Conn) {
	fmt.Println("Websocket connection established")
	var msg = ""
	for {
		err := websocket.Message.Receive(ws, &msg)
		if err != nil {
			fmt.Println("Connection closed")
			break
		}
		fmt.Printf("Received message: %s\n", msg)
		err = websocket.Message.Send(ws, msg)
		if err != nil {
			fmt.Println("Connection closed")
			break
		}
	}
}
```

这段代码中,我们首先使用`http.Handle()`函数来为Websocket连接监听路径`/ws`,并将监听函数`wsHandler`作为参数传入。`wsHandler`用来处理客户端和服务器之间的通信,它接收一个`websocket.Conn`类型的参数,表示一个Websocket连接。

在`wsHandler`中,我们首先打印一条"Websocket connection established"的日志,表示连接已经建立。然后使用`websocket.Message.Receive()`函数来接收客户端发送的消息,并使用`websocket.Message.Send()`函数将接收到的消息回传给客户端。如果有任何错误发生,我们将打印一条"Connection closed"的日志,并退出循环。

现在我们来运行这个程序,执行下面的命令:

```
go run main.go
```

这个命令将会运行我们的Websocket服务器。在浏览器中输入`http://localhost:8080`,并打开控制台,在控制台中输入以下代码即可连接到Websocket服务器:

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

ws.onopen = function() {
  console.log("Websocket connection established");
  ws.send("Hello, server!");
};

ws.onmessage = function(evt) {
  console.log("Received message: " + evt.data);
};

ws.onclose = function() {
  console.log("Websocket connection closed");
};
```

这段代码中,我们首先使用`WebSocket`对象来建立一个与服务器的连接。当连接建立成功后,我们打印一条"Websocket connection established"的日志,并使用`ws.send()`函数来向服务器发送一条消息。当我们接收到服务器返回的消息时,我们会打印一条"Received message: "的日志,并将消息内容输出。最后,当连接关闭时,我们将会打印一条"Websocket connection closed"的日志。

现在我们来尝试在控制台中输入`Hello, server!`,看看程序是否能够将消息回传给我们。如果一切正常,我们将在控制台中看到以下输出:

```
Received message: Hello, server!
```

总结

在本文中,我们介绍了如何使用Golang实现Websocket编程。我们使用标准库中的`net/http`和`golang.org/x/net/websocket`包来实现了一个简单的Websocket服务器,并用浏览器发送了一个测试消息。希望这个示例可以帮助你更好地理解Websocket的工作原理,以及如何使用Golang来实现Websocket编程。