当然可以!以下是一个使用Go编写的简单WebSocket演示程序:
package main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
func main() {
http.HandleFunc("/ws", wsHandler)
log.Println("Server started on http://localhost:8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
func wsHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println("Failed to upgrade WebSocket connection:", err)
return
}
defer conn.Close()
for {
// 读取客户端发送的消息
_, msg, err := conn.ReadMessage()
if err != nil {
log.Println("Failed to read message:", err)
break
}
log.Printf("Received message: %s\n", msg)
// 发送消息给客户端
err = conn.WriteMessage(websocket.TextMessage, msg)
if err != nil {
log.Println("Failed to write message:", err)
break
}
}
}
这个程序使用了Gorilla WebSocket库来处理WebSocket连接。它创建了一个HTTP处理程序,监听/ws
路径上的WebSocket连接请求。当有客户端发起连接请求时,它会升级连接并将其转换为WebSocket连接。然后,它会读取来自客户端的消息,并将其原样发送回客户端。
你可以将上述代码保存到一个名为main.go
的文件中,然后在终端中使用以下命令来运行程序:
go run main.go
接下来,你可以使用任何WebSocket客户端工具(如浏览器中的JavaScript代码)来连接到ws://localhost:8080/ws
并发送/接收消息。
以下是一个包含完整HTML和JavaScript的示例,你可以将其保存为.html
文件并在浏览器中打开:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WebSocket Client</title>
</head>
<body>
<input type="text" id="messageInput" placeholder="输入消息">
<button id="sendButton">发送</button>
<script>
const socket = new WebSocket('ws://localhost:8080/ws');
const messageInput = document.getElementById('messageInput');
const sendButton = document.getElementById('sendButton');
// 连接建立时触发
socket.onopen = function(event) {
console.log('WebSocket 连接已建立');
};
// 收到消息时触发
socket.onmessage = function(event) {
const message = event.data;
console.log('收到消息:', message);
};
// 连接关闭时触发
socket.onclose = function(event) {
console.log('WebSocket 连接已关闭');
};
// 发生错误时触发
socket.onerror = function(event) {
console.error('WebSocket 错误:', event);
};
// 发送消息
function sendMessage() {
const message = messageInput.value;
if (socket.readyState === WebSocket.OPEN && message) {
socket.send(message);
console.log('发送消息:', message);
messageInput.value = '';
} else {
console.error('WebSocket 连接尚未建立或消息为空');
}
}
// 点击提交按钮时发送消息
sendButton.addEventListener('click', sendMessage);
</script>
</body>
</html>
请注意,以上代码将所有内容包含在一个HTML文件中,并通过<script>
标签将JavaScript代码嵌入到HTML中。在浏览器中打开此文件后,它将建立与Go WebSocket服务器的连接,并在浏览器的开发者工具控制台中输出日志。你可以根据需要修改HTML标题和页面结构。