使用go语言写一个脚本 实现WebSockt连接 用户发送a 得到返回b

在Go语言中实现一个简单的WebSocket服务器,该服务器能够接收客户端发送的"a"并返回"b",可以按照以下步骤进行。首先,确保你的环境中已经安装了Go语言环境。接下来,你需要安装一个WebSocket库来处理WebSocket连接。这里我们使用`gorilla/websocket`,这是一个非常流行的WebSocket库。

步骤 1: 安装gorilla/websocket

打开命令行,执行以下命令来安装`gorilla/websocket`库:

```bash

go get github.com/gorilla/websocket

```

步骤 2: 创建WebSocket服务器

创建一个新的Go文件,例如`main.go`,然后添加以下代码:

```go

package main

import (

"fmt"

"log"

"net/http"

"github.com/gorilla/websocket"

)

var upgrader = websocket.Upgrader{

// 允许所有来源的连接

CheckOrigin: func(r *http.Request) bool {

return true

},

}

func echo(w http.ResponseWriter, r *http.Request) {

// 升级HTTP连接为WebSocket连接

conn, err := upgrader.Upgrade(w, r, nil)

if err != nil {

log.Print("upgrade:", err)

return

}

defer conn.Close()

for {

// 读取消息

msgType, msg, err := conn.ReadMessage()

if err != nil {

log.Println("read:", err)

break

}

fmt.Printf("recv: %s\n", msg)

// 检查消息是否为"a",如果是则发送"b"回客户端

if string(msg) == "a" {

if err := conn.WriteMessage(msgType, \[\]byte("b")); err != nil {

log.Println("write:", err)

break

}

}

}

}

func main() {

http.HandleFunc("/ws", echo)

fmt.Println("Starting server on :8080")

if err := http.ListenAndServe(":8080", nil); err != nil {

log.Fatal("ListenAndServe: ", err)

}

}

```

步骤 3: 运行服务器

在命令行中,导航到包含`main.go`文件的目录,并运行以下命令启动服务器:

```bash

go run main.go

```

步骤 4: 测试WebSocket服务器

你可以使用任何支持WebSocket的客户端工具(如浏览器中的JavaScript、Postman等)来测试这个WebSocket服务器。以下是一个简单的JavaScript示例,用于从浏览器连接到这个WebSocket服务器并发送消息:

```html

<!DOCTYPE html>

<html>

<body>

<script>

var socket = new WebSocket('ws://localhost:8080/ws');

socket.onopen = function(e) {

console.log("open Connection established");

console.log("Sending to server");

socket.send("a");

};

socket.onmessage = function(event) {

console.log(`message Data received from server: ${event.data}`);

};

socket.onclose = function(event) {

if (event.wasClean) {

console.log(`close Connection closed cleanly, code={event.code} reason={event.reason}`);

} else {

// e.g. server process killed or network down

// event.code is usually 1006 in this case

console.log('close Connection died');

}

};

socket.onerror = function(error) {

console.log(`error ${error.message}`);

};

</script>

</body>

</html>

```

将上述HTML代码保存为一个`.html`文件,然后用浏览器打开它,你应该能在控制台看到与WebSocket服务器的交互信息。如果一切正常,当你发送"a"时,服务器会响应"b"。

相关推荐
紧跟先前的步伐35 分钟前
Go AI Agent 实战 22|完善 Agent 执行循环:从工具调用到最终回答
人工智能·ai·golang
后台模板学习2 小时前
Go Web开发中任务调度框架的源码解析与高可用实现方案
开发语言·后端·golang
FungLeo2 小时前
成为全栈·Go 后端篇·分类树与标签关系:目录变更为何需要协调
golang·go·gorm·数据库事务·分类树·成为全栈
fly-iot3 小时前
【FDE知识库】(1):AI 编程时代开发语言选型分析,云使用go,企业用java,算法python,底层c
开发语言·人工智能·golang
FungLeo3 小时前
成为全栈·Go 后端篇·文章查询与展示投影:安全分页、排序和软删除
golang·go·gorm·分页查询·成为全栈·sql安全
紧跟先前的步伐11 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
日日大王学编程13 小时前
#Feed 流项目复盘:Redis 时间线缓存与 Outbox 消息可靠性设计
golang·1024程序员节
北冥you鱼20 小时前
Go 语言 CRUD 实战:从接口设计到真实业务场景
开发语言·后端·golang
利威尔xu1 天前
Go IM 源码实战(11):token 只是个 HASH,多端互踢的顺序错了就踢错人
后端·微服务·面试·架构·golang
microrain1 天前
SagooIoT 把协议解析和消息通知都放进了独立进程
物联网·golang·插件·sagooiot