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中的数据,有的话,发送