用websocket更好
https://github.com/owenliang/go-websocket
打开cmd,输入go get github.com/gorilla/websocket
检查下你的网络。
是原因你运行的依赖上需要管理员的权限,解决的办法是降级你的依赖,重新用非管理员的方式去下载一下
我的思路是:
ws://localhost:8089/upgrade?cluster_uuid=233242 #此处的uuid是每个连接的唯一id, 后端保存时作为map的key
后端把做好的连接放到map中: imp.ConnMap[clusterUUID] = conn # 下面代码一直轮询,防止整个函数体退出 for { select { case <-conn.CloseChan: goto ERR } }
我在beego的另外一个路由对应的controller中获取websocket连接,此时程序错误,说连接已经被关闭了
合并编码,那不是直接合在一起
这个要相互规定一下,这是细节问题
post方式是不可以的。get方式请求,数据是被放在请求的 URL 中,而 POST 请求的 HTTP 消息主体中发送的
现在肯定没问题啊
最简单 的办法就是加机器
1、一个连接建立后,3个协成是同一个结构体变量的方法,该结构体中的属性在3个协成中可见可操作。因为结构体的方法是引用传值【func (wsConn *wsConnection)】
2、不是共用的,每个连接都是创建了一个局部结构体变量保存数据和方法调用。连接间没有共用数据。
希望小鱼儿老师看看我理解的是否有偏差呢
作者的程序是服务端启动后,就会监听一个端口等待客户端连接,每来一个客户端就会在wsHandler处理函数中
建立连接。并使用局部结构体变量wsConn包含了连接和读写管道,读写管道和这个通信长连接都在这个局部结构体变量中,启动的处理、读、写协成都是调用的该结构体方法。且需引用传值,保证操作的是同一个地址空间,同一个结构体变量。
打开多个客户端网页,会产生多个连接,每个连接对应自己的客户端。每个连接的处理都在自己的结构体方法中完成。从客户端发送消息,服务端读到什么再发回给对应客户端,不会跑到别的客户端网页上。
如果服务端想给所有客户端群发消息,可以将wsConn局部变量保存在一个全局数组中或者redis等存储介质中,
遍历所有连接发送数据。
如果将读 写管道换成全局变量,某个客户端发送数据被对应连接协成放入到inchan管道后,会随机被某个连接的协成读取并放入全局outchan管道中,再被该连接的协成从outchan管道取走发送给该连接对应客户端。
已经知道了。。
自己实现一下可以,不复杂
WriteMessage 不是写进去了嘛
不需要关闭,调用Close方法后一个链接对应的所有协程都死了,对于这个链接分配的内存数据都释放了(这里的inchan、outchan也是内存数据)