UDP模式,怎么主动给客户端发消息呢?

snang

UDP模式,怎么主动给客户端发消息呢?
当客户端给服务器发消息,服务器端会通过onMessage给客户端回复消息,但是当客户端没有给服务器端发消息,那么服务器端如何主动给客户端发消息呢?

14097 9 0
9个回答

damao

用定时器发?

  • 暂无评论
snang

关键用定时器发给谁啊,只能获取外网的ip地址,怎么发到内网客户端的那个机器呢?

  • 暂无评论
damao

得内网用户主动发个udp请求给服务端,不然服务端无法给给某个局域网的用户发消息的。

  • 暂无评论
snang

是啊,内网请求,直接通过send回复没有问题。现在就想知道怎么主动推送消息。

  • 暂无评论
damao

客户端给服务端先发送一个udp请求,服务端保存这个connection,然后定时器定时通过这个connection发送给客户端

  • zhengweipx 2018-04-10

    定时发送也写在onMessage这个方法里吗?

  • damao 2018-04-10

    对啊

  • vilson 2019-05-23

    我也遇到这个问题了。只能用这种方式吗?用存储的connection发送的话,没法子接受返回的数据呀。。

snang

connection包含了以下信息:
{
=>
NULL
=>
resource(11) of type (stream)
=>
string(20) "123.139.19.15:46307"
=>
NULL
=>
NULL
=>
NULL
}

其中只有 是客户端的信息,客户端是通过路由器连接到服务器,如果从服务器上给客户端发消息,我测试服务器不能通过123.139.19.15:46307发给客户端(局域网内可以,这样是不是只有固定IP的才可以?)

  • 暂无评论
walkor

udp的话超过一定时间不通讯,一般外网路由器会关闭那个临时端口的,这时外网服务器是无法给客户端推送的。这个是间不一定,有的可能超过10秒不通讯就关闭了。

snang

原来是这样,非常感谢,那是不是使用GatewayWorker的TCP协议更合适一些?

  • vilson 2019-05-23

    请问这个问题有别的解决方案嘛?

walkor

嗯,tcp更适合做推送,推送类推荐用GatewayWorker。接口和分布式部署都超级简单方便

  • 暂无评论
年代过于久远,无法发表回答
🔝