GatewayClient在多实例(多应用)或者常驻内存项目中使用会不会出现问题?

阳光

问题描述

GatewayClient在调用方法前需要设置registerAddress,但是这个属性是静态的,那在GatewayWorker是多实例(多应用)或者项目是常驻内存的情况下,这个静态的registerAddress属性的设置会不会互相影响到?

为此你搜索到了哪些方案及不适用的原因

123 2 0
2个回答

不影响

  • 阳光 4天前

    实际项目中,是在最开始就设置registerAddress属性值的,意思是并不是设置registerAddress后就立即调用sendToClient方法,中间有数据库操作、文件操作等等,那这个会影响吗?

  • walkor 4天前

    每次调用gateway接口时设置下registerAddress就不影响

muyu

本质上GatewayClient就是一个发送特定数据的tcp或者udp的类库,确保registerAddress就行,会不会混乱取决你如何写,就好比数据库连接

  • 阳光 4天前

    我现在是采用官方推荐的GatewayWorker和TP框架结合的方式,然后用swoole做http服务器(workerman应该也是类似,常驻内存),非阻塞I/O,是不是请求A遇到I/O就会切换处理请求B,如果请求B改变了registerAddress的值,那么再切换回请求A是不是就会出错呢?目前在厘清这里面的问题

  • walkor 4天前

    如果GatewayClient如果要设置多个registerAddress,不要使用swoole和swow,很大概率会出现并发问题。
    除非你会加锁,让 registerAddressse设置和调用Gateway接口是一个完整的操作,期间不会被其它协程修改registerAddressse

  • 阳光 4天前

    使用workerman能否避免?还是说只要是非阻塞I/O都存在这个问题?不知道我的非阻塞I/O理解的对不对。。。

  • walkor 4天前

    workerman里不是用swoole/swow可以避免这个问题。gatewayClient是阻塞方式调用的,不会出现问题。

🔝