我有两个这样的对象:
clientsService clserver = clientsService(&clientServerFD,portclientsrv);
techniciansService techserver = techniciansService(&techServerFD,porttechsrv);
它构造了绑定和侦听本地端口所需的一切。
所以要做多线程,我之前只使用fork()
来调用调用accept()
并保持的对象方法。所以我可以为clserver做两个accept()
,为techserver做另一个 if(fork()==0){
//SERVICE THAT ACCEPTS Clients
while(1){
int client = server.startService(sockfd); //holds on accept()
if(fork()==0){
server.waitForTechnician(client); //holds in loop asking techserver if there is any technician FD to connect to.
shutdown(client,2); //when done talking clients shutdowns.
exit(0);
}else continue;
}
}
else{
//SERVICE THAT ACCEPTS TECH
while(1){
int tecnico = techserver.startService(techfd); //holds on accept()
if(fork()==0){
techserver.initWork(tecnico); //start to work to later, check in a loop if in server object is a client FD available to connect to.
shutdown(tecnico,2);
exit(0);//disconnected
}else continue;
}
}
。
问题是:我需要那个技术服务器,它在接受返回连接fd后立即分叉,检查clserver实例以返回客户端fd。
该计划的目标是一个类似聊天的技术支持。我知道,我会在以后确保这些事情,但现在我必须把它付诸实践。
问题:如何在其他进程中与另一个实例进行对话?
可以通过fork()引用服务器对象和techserver对象吗?在父服务器上的服务器对象上会注意到对孩子中的techserver对象的更改吗?
我虽然关于信号,但我不清楚如何返回客户fd的价值。 检查是否有客户端正在等待技术人员连接,因此它之后就像tcp代理一样。 使用fork()是正确的方法还是我刚刚被困在这里,因为我没有使用正确的函数和编程逻辑?
代码作为我启动服务程序的一个例子:
@echo on
For /F "delims=" %%i in ('cd') Do set currentdir=%%i
SET CLASSPATH=%currentdir%\bin;%currentdir%\lib\poi-3.9.jar;
set JAVA_HOME=C:\Program Files\Java\jre6
SET path=%JAVA_HOME%\bin;%path%;
java com/main/MainRunner
pause