1、如何把net.Conn 保存在redis里? 因为现在我有个tcp服务端,给设备去用的,部署了分布式,所以设置连接服务器 是随机的 可能是A服务器 可能是B服务器 然后我之前是把conn保存在map里的 但是 这样A服务器跟B服务器 map不能相互读到
我的一个流程是 设备通过TCP连接到我的服务器 假设端口为8081 我的App也长连接我的服务器 8081 只是发送的内容不一样,我需要的是当我app发送一条指令 能发给指定设备。
求大神们 帮帮忙 或者有好的方法
有疑问加站长微信联系(非本文作者)

每个连接建立时,给它分配一个唯一标识,通过这个标识来区分连接
问题是标识我是可以做 现在就是用map来保存这些连接 tcp句柄的 但是服务器不同 好比我APP端请求服务器要求设备告诉我数据,app发送消息给服务器 ,服务器再发给设备 ,设备收到回应后 返回数据时跑到了另一台服务器
那你就把标识和服务器映射关系存在 redis 中,然后通过标识可以反查出哪个服务器了
就不能把net.Conn 这个对象保存在一个公共的地方吗 因为我这边设备是希望不跟我redis链接的
net.Conn 是一个接口,你存入到当前进程之外,涉及到序列化的问题;你怎么序列化这个接口啊~
网络连接是不可序列化的,原因也很简单,网络连接底层是TCP/IP,需要网络两端实时保持连接状态,一旦状态发送变化,连接就断开了。你只能把这些连接保存在连接所在服务器的内存中,然后还得注意保存心跳,放在连接失效断开。然后在需要的时候拿出来继续使用,当然该连接如果还活着的话。
像channel说的,将设备ID和连接的服务器地址关联起来存到所有服务器都能访问到的Redis里面,当某台服务器收到某个app连接发来的请求时,先看请求里面的设备ID在不在本进程的设备ID和Conn对象关联的map里面,不在的话查Redis获取设备ID对应的服务器地址,然后将请求转发给该服务器处理,HTTP,grpc都可以