Golang WebWire - WebSocket抽象库的使用指南

Golang WebWire - WebSocket抽象库的使用指南 大家好,我很自豪地宣布我们全新的 WebSocket 抽象库的第一个官方测试版本:WebWire!🎉🍾

该库实现了原始 WebSocket 无法提供的实用功能,例如请求-回复认证与会话。它让我们能够将 JavaScript 应用程序(使用官方 JavaScript 客户端库)与 Go 后端无缝集成,实现双向实时通信。这感觉更像是双向 HTTP,但开销要小得多。

我们欢迎批评、问题和建议!欢迎在 GitHub Issues 板块提出功能建议和报告(潜在)错误。你也可以通过 Slack(Roman Sharkov)和 Telegram @Romshark 直接联系我。

总之,感谢大家的关注,编程愉快!


更多关于Golang WebWire - WebSocket抽象库的使用指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang WebWire - WebSocket抽象库的使用指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


WebWire 是一个很有前景的 WebSocket 抽象库,它为 Go 开发者提供了更简洁的方式来处理双向实时通信,特别是通过内置的请求-回复模式和会话管理功能。以下是一个基本的使用示例,展示如何在 Go 后端设置 WebWire 服务器,并处理来自 JavaScript 客户端的连接和消息。

首先,确保安装 WebWire 库:

go get github.com/qbeon/webwire-go

然后,创建一个简单的 Go 服务器。这个示例演示如何设置服务器、定义处理程序来处理客户端请求,并管理会话。

package main

import (
	"log"
	"net/http"

	"github.com/qbeon/webwire-go"
)

func main() {
	// 初始化 WebWire 服务器
	server, err := webwire.NewServer(webwire.ServerOptions{
		// 设置服务器地址,例如监听本地 8080 端口
		Address: ":8080",
		// 可选:设置自定义的请求处理程序
		Handler: &myHandler{},
	})
	if err != nil {
		log.Fatal("Failed to create server:", err)
	}

	// 启动服务器
	log.Println("WebWire server starting on :8080")
	if err := server.ListenAndServe(); err != nil {
		log.Fatal("Server error:", err)
	}
}

// 自定义处理程序结构,实现 webwire.Handler 接口
type myHandler struct{}

// 处理客户端连接
func (h *myHandler) OnClientConnected(client webwire.Client) {
	log.Printf("Client connected: %s", client.Identifier())
}

// 处理客户端断开连接
func (h *myHandler) OnClientDisconnected(client webwire.Client, reason error) {
	log.Printf("Client disconnected: %s, reason: %v", client.Identifier(), reason)
}

// 处理来自客户端的请求
func (h *myHandler) OnRequest(
	client webwire.Client,
	message webwire.Message,
) (response webwire.Payload, err error) {
	// 示例:根据消息内容回复
	msgData := string(message.Payload.Data())
	log.Printf("Received request from client %s: %s", client.Identifier(), msgData)

	// 返回一个简单的回复
	response = webwire.Payload{
		Encoding: webwire.EncodingUtf8,
		Data:     []byte("Echo: " + msgData),
	}
	return response, nil
}

// 处理客户端信号(单向消息)
func (h *myHandler) OnSignal(
	client webwire.Client,
	message webwire.Message,
) error {
	log.Printf("Received signal from client %s: %s", client.Identifier(), string(message.Payload.Data()))
	// 对于信号,不需要回复
	return nil
}

在这个示例中:

  • 服务器监听在 :8080 端口,使用自定义的 myHandler 来处理事件。
  • OnClientConnectedOnClientDisconnected 方法分别处理客户端连接和断开事件。
  • OnRequest 方法处理客户端的请求-回复消息,并返回一个回显响应。
  • OnSignal 方法处理单向信号消息,不发送回复。

对于 JavaScript 客户端,你可以使用官方的 webwire-js 库来连接这个服务器。例如,在浏览器中:

import { Client } from 'webwire-js';

const client = new Client('ws://localhost:8080');
await client.connect();

// 发送请求并等待回复
const response = await client.request('Hello from JS');
console.log('Server reply:', response.data);

// 发送信号(单向)
client.signal('This is a signal');

这个示例展示了 WebWire 的核心功能:通过请求-回复模式实现双向通信,同时内置了会话管理(通过 client.Identifier() 访问)。如果你的应用需要认证,可以在 OnClientConnected 中实现逻辑,例如验证令牌并关联会话。

WebWire 减少了手动处理 WebSocket 协议的复杂性,让开发者专注于业务逻辑。如果在集成过程中遇到问题,可以参考 GitHub 文档或报告问题。

回到顶部