Tigase packet跨服务器流程

10.10.2.120服务器账号 66666@10.10.2.120 发送消息给90024@10.10.2.130
以下为log
https://download.csdn.net/download/w690333243/10638078

其中方法调用

Src/main/java/tigase/server/ConnectionManager.java 
private static ConnectionOpenThread connectThread = ConnectionOpenThread.getInstance();
->setProperties()
->addWaitingTask(port_props) ->reconnectService
->startService(port_props) ->addConnectionOpenListener

ConnectionManage.ConnectionListenerImpl
->cli.accept(SocketChanne sc)
->IO serv = getXMPPIOServiceInstance();
serv.accept(sc);  

->socketIO = new SocketIO(socketChannel);
IOInterface   getSocketChannel



ConnectionOpenThread : 实现了runnable接口,监听xmpp连接
getInstance(){new Thread(new ConnectionOpenThread()).start}
SocketThread.java
static
{new Thread(socketReadThread[i]).start}
run()
->completionService.submit(serv);
IOService.java 
->Call()  
-> serviceListener.packetsReady(this);
ConnectionManager.java
->packetsReady(IO serv)
->processSocketData(serv)

src/main/java/tigase/server/xmppclient/ClientConnectionManager.java
->processSocketData(serv)
->addOutPacket(p);

AbstractMessageReceiver.java
->addOutPacket(p);
->out_queues.get(queueIdx).put(packet, packet.getPriority().ordinal());
src/main/java/tigase/server/AbstractMessageReceiver.java
startThreads()
AbstractMessageReceiver.QueueListener.java extends Thread
run()
-> packet = queue.take();
-> processPacket(packet);

src/main/java/tigase/server/ConnectionManager.java
->writePacketsToSocket(serv, processSocketData(serv));
-> serv.addPacketToSend(p);
->serv.processWaitingPackets();
XMPPIOService.java
->processWaitingPackets()
Src/main/java/tigase/server/xmppsession/SessionManager.java
->handleLogin()

组件的getDefaults()方法调用流程
Src/main/java/tigase/server/XmppServer.java
->setConfig()
Src/main/java/tigase/server/MessageRouter.java
-> addRegistrator()
Src/main/java/tigase/server/AbstractComponentRegistrator.java
-> addComponent()
Src/main/java/tigase/conf/ConfiguratorAbstract.java
-> componentAdded()
->setup()
->component.getDefaults(getDefConfigParams()),component.setProperties(prop);
Src/main/java/tigase/server/xmppsession/SessionManager.java
->getDefaults() 

跨服务器的流程和本地路由基本与相似,
可以参考https://blog.csdn.net/Cancer_DD/article/details/38872497
不同点

MessageRouter.processPacket(Packet packet)部分代码如下:
@Override
	public void processPacket(Packet packet) {
	
        //getTo 方法取pcketTo的值,若为空,则取stanzaTo(中的to)
		if (packet.getTo() == null) {
			return;
		}    
        ...
        //匹配分发组件
		ServerComponent comp = getLocalComponent(packet.getTo());
 
		if (comp != null) {
 
			Queue results = new ArrayDeque();
 
			if (comp == this) {
				processPacketMR(packet, results);
			} else {
			    ...
				comp.processPacket(packet, results);
			}
            ...
			return;//匹配本地组件成功
		}
ServerComponent[] comps = getComponentsForLocalDomain(host);

		if (comps == null) {

			// Still no component found, now the most expensive lookup.
			// Checking regex routings provided by the component.
			comps = getServerComponentsForRegex(packet.getTo().getBareJID().toString());
		}
		...
	}

匹配本地组件不成功,Packet will be processed by: s2s@localhost,由AbstractMessageReceiver的非阻塞性方法addPacketNB(Packet packet)加入到out_queues。将调用s2s组件,即S2SConnectionManager.java代码中打开连接失败(120到130的连接)将会使用tcp协议建立和其的连接,连接建立后会回调IOService.handshakeCompleted() 方法

数据库的加载流程
Src/main/java/tigase/conf/ConfiguratorAbstract.java

init方法调用了configRepo.initRepository(null, (Map) initProperties);
setProperties()方法调用了 initRepository(conn_url, params);

java.lang.Exception: this is a log
	at tigase.custom.MyMongoMessageRepository.initRepository(MyMongoMessageRepository.java:53)
	at tigase.custom.MyMongoMessageRepositoryComponent.setProperties(MyMongoMessageRepositoryComponent.java:92)
	at tigase.conf.ConfiguratorAbstract.setup(ConfiguratorAbstract.java:540)
	at tigase.conf.ConfiguratorAbstract.componentAdded(ConfiguratorAbstract.java:177)
	at tigase.conf.Configurator.componentAdded(Configurator.java:50)
	at tigase.conf.ConfiguratorAbstract.componentAdded(ConfiguratorAbstract.java:1)
	at tigase.server.AbstractComponentRegistrator.addComponent(AbstractComponentRegistrator.java:116)
	at tigase.server.MessageRouter.addComponent(MessageRouter.java:108)
	at tigase.server.MessageRouter.addRouter(MessageRouter.java:145)
	at tigase.server.MessageRouter.setProperties(MessageRouter.java:704)
	at tigase.conf.ConfiguratorAbstract.setup(ConfiguratorAbstract.java:540)
	at tigase.conf.ConfiguratorAbstract.componentAdded(ConfiguratorAbstract.java:177)
	at tigase.conf.Configurator.componentAdded(Configurator.java:50)
	at tigase.conf.ConfiguratorAbstract.componentAdded(ConfiguratorAbstract.java:1)
	at tigase.server.AbstractComponentRegistrator.addComponent(AbstractComponentRegistrator.java:116)
	at tigase.server.MessageRouter.addRegistrator(MessageRouter.java:131)
	at tigase.server.MessageRouter.setConfig(MessageRouter.java:603)
	at tigase.server.XMPPServer.start(XMPPServer.java:142)
	at tigase.server.XMPPServer.main(XMPPServer.java:112)
---initRepository---resource_uri=mongodb://127.0.0.1:12707/tigase

即tigase启动时会加载组件,在组件的setProperties方法中加载数据库,此方法是回调过来的
可以跟下ConfiguratorAbstract 中setProperties的方法

不同的服务收发消息,建立服务器之间的连接时会调用
tigase/server/xmppserver/proc/StreamOpen.java serviceStarted() serviceStopped()方法
tigase/server/xmppserver/proc/StreamFeatures.java streamOpened() process()

发送数据的流程:SocketThread.addAllWaiting() 此处会监听socket中的数据,有的话,发送

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值