websocket gateway 中间件
项目地址: websocket_gateway
github.com/tianye/websocket_gatewa...
有兴趣一起做这个小服务的同学可以联系我哈~
有兴趣使用一下的也可以联系我~
第一版功能:
可以替换 workerman 和 swoole 的一部分功能更快的让使用者更关注业务
不关心swbsocket的处理
公用的webSocket协议网关
- 完成ws协议的握手操作
- 上线事件接受
- 下线事件接受
- 消息事件接受
可以使用http协议使用
- 推送消息到管道
- 获取管道在线状态
- 踢出管道强制离线
- 获取在线管道数量
readme.md
###注意:
1\. 生产环境需要使用 Supervisor 保证稳定
2. 生成的管道ID 每离线1000个用户会重新复用 需要修改
路径文件: conf/defind.go
const ClearSocketConnectionNum = 1000
可以在自行打包, !!!所以离线的管道记录需要删除,不要存储
3. 使用实例和linux版,mac版服务端已经打包好在
linux路径文件: client_admin_service/websocket_gateway_mac.zip
mac路径文件: client_admin_service/websocket_gateway_linux_amd64.zip
需要解压缩后使用
###使用:
client_and_service文件夹
client.html 模拟客户端连接 js版本
client_php.php 模拟客户端连接 php版
client_go.go 模拟客户端连接 go版
service_api.php 模拟服务端主动调用接口
service_callback.php 模拟接受到(客户端消息和事件的处理)和当前gateway的事件处理
service_callback.log 接受到的日志
如果也是go服务的话也是直接请求接口和接受json事件就可以了.
解密管道ID的方法在文件:
common/structure/connection/connection.go:369
func DecodeConnection(connectionId string) (connectionInfo ConnectionInfo, err error)
###启动
go run main.go -network_local_ip="127.0.0.1" -intranet_local_ip="127.0.0.1" -socket_listen_port="8301" -http_listen_port="8302" -callback_url_path="http://127.0.0.1:8808/service_callback.php"
MAC版本:
./websocket_gateway_mac -network_local_ip="127.0.0.1" -intranet_local_ip="127.0.0.1" -socket_listen_port="8301" -http_listen_port="8302" -callback_url_path="http://127.0.0.1:8808/service_callback.php"
Linux版本:
./websocket_gateway_linux_amd64 -network_local_ip="127.0.0.1" -intranet_local_ip="127.0.0.1" -socket_listen_port="8301" -http_listen_port="8302" -callback_url_path="http://127.0.0.1:8808/service_callback.php"
###启动参数
-callback_url_path string
事件回调地址 (default "http://127.0.0.1:8808/service_callback.php")
-conf string
配置文件
-http_listen_port string
http监听端口 (default "8302")
-intranet_local_ip string
内网访问IP-没有请填写同外网IP (default "127.0.0.1")
-network_local_ip string
外网IP (default "127.0.0.1")
-socket_listen_port string
socket监听端口 (default "8301")
###打包:
Mac 下编译 Linux 和 Windows 64位可执行程序:
------------------------------------------------------------------
websocket_gateway_mac:
go1.14.4 build main.go
------------------------------------------------------------------
websocket_gateway_linux_amd64:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go1.14.4 build main.go
------------------------------------------------------------------
GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)
GOARCH:目标平台的体系架构(386、amd64、arm)
交叉编译不支持 CGO 所以要禁用它
------------------------------------------------------------------
本作品采用《CC 协议》,转载必须注明作者和本文链接
大概看了下代码,下列是我的感想。
没有唯一用户标识,虽然有唯一id,但是不知道是什么用户使用的连接,不能进行一些精准推送,建议加入用户id获取方法,例如jwt就直接解析uri里面的json数据了。
同上一点消息不够明确,建议加入保存握手的url进行分组,方便操作;例如我想打开网关后对对一个使用ws的功能的某个用户踢掉或拉黑。
只能推送文本桢,不知道会不会存在推送二进制桢的取要,毕竟有些消息没法使用文本桢直接发送。
建议弄一个web ui管理或查看。
还有一点个人习惯感觉分包太多,看代码有点不方便。