GatewayClient在调用方法前需要设置registerAddress,但是这个属性是静态的,那在GatewayWorker是多实例(多应用)或者项目是常驻内存的情况下,这个静态的registerAddress属性的设置会不会互相影响到?
不影响
实际项目中,是在最开始就设置registerAddress属性值的,意思是并不是设置registerAddress后就立即调用sendToClient方法,中间有数据库操作、文件操作等等,那这个会影响吗?
每次调用gateway接口时设置下registerAddress就不影响
本质上GatewayClient就是一个发送特定数据的tcp或者udp的类库,确保registerAddress就行,会不会混乱取决你如何写,就好比数据库连接
我现在是采用官方推荐的GatewayWorker和TP框架结合的方式,然后用swoole做http服务器(workerman应该也是类似,常驻内存),非阻塞I/O,是不是请求A遇到I/O就会切换处理请求B,如果请求B改变了registerAddress的值,那么再切换回请求A是不是就会出错呢?目前在厘清这里面的问题
如果GatewayClient如果要设置多个registerAddress,不要使用swoole和swow,很大概率会出现并发问题。 除非你会加锁,让 registerAddressse设置和调用Gateway接口是一个完整的操作,期间不会被其它协程修改registerAddressse
使用workerman能否避免?还是说只要是非阻塞I/O都存在这个问题?不知道我的非阻塞I/O理解的对不对。。。
workerman里不是用swoole/swow可以避免这个问题。gatewayClient是阻塞方式调用的,不会出现问题。
不影响
实际项目中,是在最开始就设置registerAddress属性值的,意思是并不是设置registerAddress后就立即调用sendToClient方法,中间有数据库操作、文件操作等等,那这个会影响吗?
每次调用gateway接口时设置下registerAddress就不影响
本质上GatewayClient就是一个发送特定数据的tcp或者udp的类库,确保registerAddress就行,会不会混乱取决你如何写,就好比数据库连接
我现在是采用官方推荐的GatewayWorker和TP框架结合的方式,然后用swoole做http服务器(workerman应该也是类似,常驻内存),非阻塞I/O,是不是请求A遇到I/O就会切换处理请求B,如果请求B改变了registerAddress的值,那么再切换回请求A是不是就会出错呢?目前在厘清这里面的问题
如果GatewayClient如果要设置多个registerAddress,不要使用swoole和swow,很大概率会出现并发问题。
除非你会加锁,让 registerAddressse设置和调用Gateway接口是一个完整的操作,期间不会被其它协程修改registerAddressse
使用workerman能否避免?还是说只要是非阻塞I/O都存在这个问题?不知道我的非阻塞I/O理解的对不对。。。
workerman里不是用swoole/swow可以避免这个问题。gatewayClient是阻塞方式调用的,不会出现问题。