多个进程如何共享同一个socket

时间:2022-02-20 06:06:49
需求:为了使游戏平台和具体的游戏,比如QQ游戏大厅和地主,杀人,放火游戏进程分离,但是却有要共享同一个socket连接

C\C++实现:在windows c下编程实现可以用复制SOCKET句柄WSADuplicateSocket或共享内存的方式,但在java中不知用何种方式,或者类似的方式,我search了一下,似乎JOMP说的是共享内存,但却不知如何使用。还有真的有必要用这种方式实现游戏平台和具体的游戏分离吗,有什么更好的实现方式呢?

160 个解决方案

#1


你可以把socket作为单一消费者。让所有要共享的做成生产者。

生产者负责产生命令,放到队列里面

消费者负责执行命令并填写执行结果

#2


竹子大哥说的很对,生产者消费者问题
http://blog.csdn.net/sunyujia/archive/2008/05/02/2362015.aspx 

抛砖引玉

#3


引用楼主 jiangguilong2000 的帖子:
需求:为了使游戏平台和具体的游戏,比如QQ游戏大厅和地主,杀人,放火游戏进程分离,但是却有要共享同一个socket连接 

C\C++实现:在windows c下编程实现可以用复制SOCKET句柄WSADuplicateSocket或共享内存的方式,但在java中不知用何种方式,或者类似的方式,我search了一下,似乎JOMP说的是共享内存,但却不知如何使用。还有真的有必要用这种方式实现游戏平台和具体的游戏分离吗,有什么更好的实现方式呢?

进程间共享 socket ?!好像比较难啊……你会有多个 JVM 进程吗?

#4


Java下面用NIO就可以了,全名就叫做New io,它使用的是reactor模式和多路复用技术。

简单的来说就是一个socket被监听,当发现有信息进入,那么监听实例报告,相应的handler来作处理。

虽然说是Reactor不过是按照event-driven 模式的。

你可以看看相关的文章,原理不难,实现也不难,不过一定要搞明白一些小细节。

http://gee.cs.oswego.edu/

这个人是线程编成大师,他现在好像是Nio的提倡者。

#5


真TMD搞笑,就这样的问题也有人能答出来.在地球版的JAVA中,你要能在多进程*享socket,我给你一百万(太少了,应该给你一亿)月薪.

#6


哈,只能帮顶了.不会啊.

#7


只能是設置共享變量了。

#8


"进程" 间共享~~~~~~~~~??????

#9


学习中
先帮楼主顶一个 
期待高手的到来

#10


用ThreadLocal
自己看API

#11


学习中
先帮楼主顶一个
期待高手的到来

#12


建议你用mina异步传输框架机制。毕竟同一个入口,会产生线程阻塞或者影响效率!

#13


引用 1 楼 java2000_net 的回复:
你可以把socket作为单一消费者。让所有要共享的做成生产者。 
生产者负责产生命令,放到队列里面 
消费者负责执行命令并填写执行结果
大哥们,是进程间共享socket对象,是进程而不是线程,是在不同的application,看清了没?

#14


顶,学习了

#15


不好意思,误导群众了,进程的话,应该没戏,永远跳出不出jvm这个圈的.

#16


JVM据我所知,没有什么高效的进程间的通信、共享机制。
因为,不同的操作系统,其进行间的通信、共享机制都有所不同,那么,
对于跨平台,可移植性,确实是一种挑战。

一般来讲,常见的Windows和Unix系统,都是基于线程的操作系统。
也就是说,CPU的时间片会按照系统的策略分配给每一个线程,而非进程。
那么,在没有什么特殊需求的情况下,我们都会选择多线程技术来编程,而非多进程技术。

还是说点有用的吧:
我想,楼主说的问题,应该是针对服务端的程序开发。
不知道,楼主对FTP协议是否有所了解。
我指的是,控制指令与实际文件传输使用不同Socket来传输。
(这样会使程序设计简单,逻辑会比较清晰)
所以,我当然也会推荐楼主采用这种思想,来设计游戏大厅与具体游戏的关系。

实际情况下, 如果游戏大厅和具体的游戏采用同一个Socket传输,那么,具体游戏的增删,会影响到通信协议的修改
而且,客户端的编程,也会比较复杂。
Java的进程间通信,一般都是用TCP、UDP或者RMI之类的东西来实现的。所以,Socket共享,好象不太现实。
这种情况下,大厅服务器会起到类似Socket代理服务器的作用。(也就是说,如果是游戏的数据,它会转发到对应的游戏服务器上)

我推荐的程序架构是这样的:
大厅服务器与客户端采用一个Socket进行通信,各游戏采用各自的Socket进行通信(因为不同的游戏,通信数据不同,协议也不尽相同)。
大厅服务器上存放一些跟游戏服务器的相关信息(比如服务器状态,服务器IP,游戏端口之类的)
客户端的开发就比较结构清晰了。
首先,开发和大厅服务器的程序。
其次,当有新游戏要添加至大厅的时候。只要在大厅服务器上添加相关的信息就可以了。
因为,游戏的客户端程序与游戏服务器程序,本身可以相对独立的成为一个系统。

不知道我这样解释,楼主是否明白。
没有解决楼主的问题,实在不好意思。

#17


谢谢各位的回复,特别是preferme一直以来对我的帮助,我目前是打算这么做:
1.针对各个不同的游戏,写不同的脚本,在server side,server会根据预先配置的读入不同的AI脚本,这脚本中包含了根据client发送过来的request进行类似switch判断后,进行的一些逻辑处理;而在client side,也会根据不同的游戏执行不同的脚本,而各个游戏都是运行在相同的game engine之上。
2.Socket到底要一个还是两个?
由于进入房间后,桌子,名单的消息管理为所有游戏共用。
如果你在创建桌子客户端程序后又新建了一个新的socket与游戏逻辑服务器进行通信,那么由此带来的玩家进入、退出、逃跑等消息会带来非常麻烦的数据同步问题,所以还暂定为一个。

#18


先提一点:java有进程这种机制吗?就像linux一样,伪进程

------------------------
你还是没有建立在OO的基础上思考你的设计

只要你是OO的,你就能区分游戏大厅和各类游戏,因为你有大厅类,各种游戏类

然后做好分工,你的每个类负责干一些什么事情

具体到你的需求

类的生成和分配

程序运行后肯定首先有大厅类的实例,然后根据用户选择,大厅类生成对应的游戏类实例,让其运行

你完全可以大家同用一个socket

先生成socket,再生成大厅,把socket传给大厅
大厅生成socket的时候,大厅再把socket传给游戏类

你也可以各自使用自己的socket
这样socket就由类自己去创建

你还可以创建一个socketHelper
专门处理数据的收发

然后是分工
划分好那些数据应该由那些类负责处理
你所说的玩家进入、退出、逃跑等消息,这时应该是大厅类所负责处理的
如果每个游戏都需要"知晓" "这类"消息,那就由大厅根据需要去通知每个游戏类




#19


另外,我不是太明白你为什么强调用进程而不能用线程?
是因为你要求分离,并把程序分成不同的文件包吧,然后大厅运行游戏的时候大厅excus()一个jar?


#20


引用 18 楼 liang8305 的回复:
先提一点:java有进程这种机制吗?就像linux一样,伪进程 

------------------------ 
你还是没有建立在OO的基础上思考你的设计 

只要你是OO的,你就能区分游戏大厅和各类游戏,因为你有大厅类,各种游戏类 

然后做好分工,你的每个类负责干一些什么事情 

具体到你的需求 

类的生成和分配 

程序运行后肯定首先有大厅类的实例,然后根据用户选择,大厅类生成对应的游戏类实例,让其运行 

你完全可以大家同用一个socke…

我要反问一下,设想一下,QQGame一开始运营的时候只有5个游戏,比如,双扣,杀人,放火,抢劫,偷窃;后来因为需求的原因想再加入另外四个游戏,但却不想去改动原先的代码(最多只在某个文件配置一下,告诉server我们又多了另外几个game),而在client,各个游戏和游戏大厅相互独立的,互相完全解耦,共享的是socket连接等,从扩展性角度来考虑,当然是这种方式好了,而你说的设计方式是把大厅和具体的游戏逻辑都捆绑在一起了,以后要扩展,加入游戏,就必须改动这些代码,这样的设计合理吗?

#21


引用 19 楼 liang8305 的回复:
另外,我不是太明白你为什么强调用进程而不能用线程? 
是因为你要求分离,并把程序分成不同的文件包吧,然后大厅运行游戏的时候大厅excus()一个jar? 
理解的很对,我们想把具体游戏和大厅完全独立开来,做到正真的解耦,以后新添加游戏的话,最多在大厅的配置文件里加入这个游戏的名单就行.当然server端和client端的设计又有所区别。

#22


同19楼,我也没搞明白楼主干嘛用不同进程,我记得联众就是用你在这说的这种方式:
引用 17 楼 jiangguilong2000 的回复:
谢谢各位的回复,特别是preferme一直以来对我的帮助,我目前是打算这么做:
1.针对各个不同的游戏,写不同的脚本,在server side,server会根据预先配置的读入不同的AI脚本,这脚本中包含了根据client发送过来的request进行类似switch判断后,进行的一些逻辑处理;而在client side,也会根据不同的游戏执行不同的脚本,而各个游戏都是运行在相同的game engine之上。
2.Socket到底要一个还是两个?
由于进入房间后,桌子,名单的消…

#23


引用 15 楼 sunyujia 的回复:
不好意思,误导群众了,进程的话,应该没戏,永远跳出不出jvm这个圈的.
兄弟,你错了,其实是跳得出的,虽然暂时不采用这个多进程共享的方案,但我已经实现了:
1.用一个进程去触发产生一个新的进程,当然是跑在另外一个虚拟机上了。
2.在不同进程间进行对象的传送,包括socket对象
不过这种方式有其缺憾之处:每个游戏各自建一个jar,那么,底层的图形引擎各自独立,包括lib不能共享,并且要以房间客户端做消息转发.

#24


引用 5 楼 axman 的回复:
真TMD搞笑,就这样的问题也有人能答出来.在地球版的JAVA中,你要能在多进程*享socket,我给你一百万(太少了,应该给你一亿)月薪. 
兄弟,如果你说话算话的话,给我吧,我发源代码给你。

#25


考虑把图形引擎之类的东西做成dll呢?

#26


引用 23 楼 jiangguilong2000 的回复:
引用 15 楼 sunyujia 的回复:
不好意思,误导群众了,进程的话,应该没戏,永远跳出不出jvm这个圈的. 
兄弟,你错了,其实是跳得出的,虽然暂时不采用这个多进程共享的方案,但我已经实现了: 
1.用一个进程去触发产生一个新的进程,当然是跑在另外一个虚拟机上了。 
2.在不同进程间进行对象的传送,包括socket对象 
不过这种方式有其缺憾之处:每个游戏各自建一个jar,那么,底层的图形引擎各自独立,包括lib不能共享,并且要以…

呵呵,强啊,jni辅助实现吗?高人啊,其实现在csdn的高人不常出现,很多都不再了,所以可能你得再等等了.我头一次听说可以实现,关注.

#27


单独启动一个JVM做Socket代理,也就是消费者。

其它要共享socket的,都直接和他通信,方法随意,可以是本地socket,rmi,webservice

总之,这个和我们局域网的代理服务器没有任何区别。

我们所有人上网,都是共享一个代理服务的。

OVER

#28


局域网的每个机器都是生产者,把各自的读取请求发送给代理

代理作为统一的消费者,安排执行顺序并返回结果。

发送的方法很多,比如设置网关,本地设置代理服务器,本地安装软件。

#29


由一个线程管理套接字就行咯......

#30


建立共享空间

#31


厉害

#32


高手!!

#33


学习

#34


帮顶!!!!!!!!!!!

#35


说得好啊,

#36


我觉得直接作为临界资源使用即可。

#37


关注

#38


不懂JAVA,是奔着题目来的。如果用VC来实现倒是很简单,创建一个基础COM的NT服务进程,在此进程中使用临界区保证原子一致性即可,如果是异步处理,还可以使用队列技术。
依稀记得JAVA也也自己的组件技术和互斥技术,也可以编写NT服务,为何不按上述思路进行呢?如果实现起来麻烦,那也完全可以先用VC编写该服务,然后由JAVA编写调用COM接口的客户端,这应该很简单吧?

#39


很牛的东东了哦,不懂

#40


学习中 
帮楼主顶一个 

#41


顶下

#42


vb 好

#43


等待高人现身...

#44


要说的都说了  只能帮顶了

#45


mark~一下,学习.~

#46


新手学习中。。。

#47


你的想法很好!
可惜实现不了!!!
呵呵,最好换个思路吧!

#48


建议你看看丹尼斯写的Unix,那告诉你怎么回事,以及为什么不能的原因.

#49


Mark!

#50


引用 20 楼 jiangguilong2000 的回复:
引用 18 楼 liang8305 的回复:
我要反问一下,设想一下,QQGame一开始运营的时候只有5个游戏,比如,双扣,杀人,放火,抢劫,偷窃;后来因为需求的原因想再加入另外四个游戏,但却不想去改动原先的代码(最多只在某个文件配置一下,告诉server我们又多了另外几个game),而在client,各个游戏和游戏大厅相互独立的,互相完全解耦,共享的是socket连接等,从扩展性角度来考虑,当然是这种方式好了,而你说的设计方式是把大厅和具体的游戏逻辑都捆绑在一起了,以后要扩展,加入游戏,就必须改动这些代码,这样的设计合理吗?


所以我说你还是没有理解OO,你还是停留在过程设计上
我的设计怎么会大厅和游戏捆绑在一起?
每个游戏的"游戏逻辑"可以完全不同,
只需要遵循一定的接口即可
例如说必须有一个start()方法用来运行游戏
然后有一个UserNotify()方法来接收用户的进出信息
这两个方法可以做成接口也可以写在父类"Game"中
然后具体的游戏例如 双扣就extends Game()

大厅要运行游戏只需要new XXGame().start()

#1


你可以把socket作为单一消费者。让所有要共享的做成生产者。

生产者负责产生命令,放到队列里面

消费者负责执行命令并填写执行结果

#2


竹子大哥说的很对,生产者消费者问题
http://blog.csdn.net/sunyujia/archive/2008/05/02/2362015.aspx 

抛砖引玉

#3


引用楼主 jiangguilong2000 的帖子:
需求:为了使游戏平台和具体的游戏,比如QQ游戏大厅和地主,杀人,放火游戏进程分离,但是却有要共享同一个socket连接 

C\C++实现:在windows c下编程实现可以用复制SOCKET句柄WSADuplicateSocket或共享内存的方式,但在java中不知用何种方式,或者类似的方式,我search了一下,似乎JOMP说的是共享内存,但却不知如何使用。还有真的有必要用这种方式实现游戏平台和具体的游戏分离吗,有什么更好的实现方式呢?

进程间共享 socket ?!好像比较难啊……你会有多个 JVM 进程吗?

#4


Java下面用NIO就可以了,全名就叫做New io,它使用的是reactor模式和多路复用技术。

简单的来说就是一个socket被监听,当发现有信息进入,那么监听实例报告,相应的handler来作处理。

虽然说是Reactor不过是按照event-driven 模式的。

你可以看看相关的文章,原理不难,实现也不难,不过一定要搞明白一些小细节。

http://gee.cs.oswego.edu/

这个人是线程编成大师,他现在好像是Nio的提倡者。

#5


真TMD搞笑,就这样的问题也有人能答出来.在地球版的JAVA中,你要能在多进程*享socket,我给你一百万(太少了,应该给你一亿)月薪.

#6


哈,只能帮顶了.不会啊.

#7


只能是設置共享變量了。

#8


"进程" 间共享~~~~~~~~~??????

#9


学习中
先帮楼主顶一个 
期待高手的到来

#10


用ThreadLocal
自己看API

#11


学习中
先帮楼主顶一个
期待高手的到来

#12


建议你用mina异步传输框架机制。毕竟同一个入口,会产生线程阻塞或者影响效率!

#13


引用 1 楼 java2000_net 的回复:
你可以把socket作为单一消费者。让所有要共享的做成生产者。 
生产者负责产生命令,放到队列里面 
消费者负责执行命令并填写执行结果
大哥们,是进程间共享socket对象,是进程而不是线程,是在不同的application,看清了没?

#14


顶,学习了

#15


不好意思,误导群众了,进程的话,应该没戏,永远跳出不出jvm这个圈的.

#16


JVM据我所知,没有什么高效的进程间的通信、共享机制。
因为,不同的操作系统,其进行间的通信、共享机制都有所不同,那么,
对于跨平台,可移植性,确实是一种挑战。

一般来讲,常见的Windows和Unix系统,都是基于线程的操作系统。
也就是说,CPU的时间片会按照系统的策略分配给每一个线程,而非进程。
那么,在没有什么特殊需求的情况下,我们都会选择多线程技术来编程,而非多进程技术。

还是说点有用的吧:
我想,楼主说的问题,应该是针对服务端的程序开发。
不知道,楼主对FTP协议是否有所了解。
我指的是,控制指令与实际文件传输使用不同Socket来传输。
(这样会使程序设计简单,逻辑会比较清晰)
所以,我当然也会推荐楼主采用这种思想,来设计游戏大厅与具体游戏的关系。

实际情况下, 如果游戏大厅和具体的游戏采用同一个Socket传输,那么,具体游戏的增删,会影响到通信协议的修改
而且,客户端的编程,也会比较复杂。
Java的进程间通信,一般都是用TCP、UDP或者RMI之类的东西来实现的。所以,Socket共享,好象不太现实。
这种情况下,大厅服务器会起到类似Socket代理服务器的作用。(也就是说,如果是游戏的数据,它会转发到对应的游戏服务器上)

我推荐的程序架构是这样的:
大厅服务器与客户端采用一个Socket进行通信,各游戏采用各自的Socket进行通信(因为不同的游戏,通信数据不同,协议也不尽相同)。
大厅服务器上存放一些跟游戏服务器的相关信息(比如服务器状态,服务器IP,游戏端口之类的)
客户端的开发就比较结构清晰了。
首先,开发和大厅服务器的程序。
其次,当有新游戏要添加至大厅的时候。只要在大厅服务器上添加相关的信息就可以了。
因为,游戏的客户端程序与游戏服务器程序,本身可以相对独立的成为一个系统。

不知道我这样解释,楼主是否明白。
没有解决楼主的问题,实在不好意思。

#17


谢谢各位的回复,特别是preferme一直以来对我的帮助,我目前是打算这么做:
1.针对各个不同的游戏,写不同的脚本,在server side,server会根据预先配置的读入不同的AI脚本,这脚本中包含了根据client发送过来的request进行类似switch判断后,进行的一些逻辑处理;而在client side,也会根据不同的游戏执行不同的脚本,而各个游戏都是运行在相同的game engine之上。
2.Socket到底要一个还是两个?
由于进入房间后,桌子,名单的消息管理为所有游戏共用。
如果你在创建桌子客户端程序后又新建了一个新的socket与游戏逻辑服务器进行通信,那么由此带来的玩家进入、退出、逃跑等消息会带来非常麻烦的数据同步问题,所以还暂定为一个。

#18


先提一点:java有进程这种机制吗?就像linux一样,伪进程

------------------------
你还是没有建立在OO的基础上思考你的设计

只要你是OO的,你就能区分游戏大厅和各类游戏,因为你有大厅类,各种游戏类

然后做好分工,你的每个类负责干一些什么事情

具体到你的需求

类的生成和分配

程序运行后肯定首先有大厅类的实例,然后根据用户选择,大厅类生成对应的游戏类实例,让其运行

你完全可以大家同用一个socket

先生成socket,再生成大厅,把socket传给大厅
大厅生成socket的时候,大厅再把socket传给游戏类

你也可以各自使用自己的socket
这样socket就由类自己去创建

你还可以创建一个socketHelper
专门处理数据的收发

然后是分工
划分好那些数据应该由那些类负责处理
你所说的玩家进入、退出、逃跑等消息,这时应该是大厅类所负责处理的
如果每个游戏都需要"知晓" "这类"消息,那就由大厅根据需要去通知每个游戏类




#19


另外,我不是太明白你为什么强调用进程而不能用线程?
是因为你要求分离,并把程序分成不同的文件包吧,然后大厅运行游戏的时候大厅excus()一个jar?


#20


引用 18 楼 liang8305 的回复:
先提一点:java有进程这种机制吗?就像linux一样,伪进程 

------------------------ 
你还是没有建立在OO的基础上思考你的设计 

只要你是OO的,你就能区分游戏大厅和各类游戏,因为你有大厅类,各种游戏类 

然后做好分工,你的每个类负责干一些什么事情 

具体到你的需求 

类的生成和分配 

程序运行后肯定首先有大厅类的实例,然后根据用户选择,大厅类生成对应的游戏类实例,让其运行 

你完全可以大家同用一个socke…

我要反问一下,设想一下,QQGame一开始运营的时候只有5个游戏,比如,双扣,杀人,放火,抢劫,偷窃;后来因为需求的原因想再加入另外四个游戏,但却不想去改动原先的代码(最多只在某个文件配置一下,告诉server我们又多了另外几个game),而在client,各个游戏和游戏大厅相互独立的,互相完全解耦,共享的是socket连接等,从扩展性角度来考虑,当然是这种方式好了,而你说的设计方式是把大厅和具体的游戏逻辑都捆绑在一起了,以后要扩展,加入游戏,就必须改动这些代码,这样的设计合理吗?

#21


引用 19 楼 liang8305 的回复:
另外,我不是太明白你为什么强调用进程而不能用线程? 
是因为你要求分离,并把程序分成不同的文件包吧,然后大厅运行游戏的时候大厅excus()一个jar? 
理解的很对,我们想把具体游戏和大厅完全独立开来,做到正真的解耦,以后新添加游戏的话,最多在大厅的配置文件里加入这个游戏的名单就行.当然server端和client端的设计又有所区别。

#22


同19楼,我也没搞明白楼主干嘛用不同进程,我记得联众就是用你在这说的这种方式:
引用 17 楼 jiangguilong2000 的回复:
谢谢各位的回复,特别是preferme一直以来对我的帮助,我目前是打算这么做:
1.针对各个不同的游戏,写不同的脚本,在server side,server会根据预先配置的读入不同的AI脚本,这脚本中包含了根据client发送过来的request进行类似switch判断后,进行的一些逻辑处理;而在client side,也会根据不同的游戏执行不同的脚本,而各个游戏都是运行在相同的game engine之上。
2.Socket到底要一个还是两个?
由于进入房间后,桌子,名单的消…

#23


引用 15 楼 sunyujia 的回复:
不好意思,误导群众了,进程的话,应该没戏,永远跳出不出jvm这个圈的.
兄弟,你错了,其实是跳得出的,虽然暂时不采用这个多进程共享的方案,但我已经实现了:
1.用一个进程去触发产生一个新的进程,当然是跑在另外一个虚拟机上了。
2.在不同进程间进行对象的传送,包括socket对象
不过这种方式有其缺憾之处:每个游戏各自建一个jar,那么,底层的图形引擎各自独立,包括lib不能共享,并且要以房间客户端做消息转发.

#24


引用 5 楼 axman 的回复:
真TMD搞笑,就这样的问题也有人能答出来.在地球版的JAVA中,你要能在多进程*享socket,我给你一百万(太少了,应该给你一亿)月薪. 
兄弟,如果你说话算话的话,给我吧,我发源代码给你。

#25


考虑把图形引擎之类的东西做成dll呢?

#26


引用 23 楼 jiangguilong2000 的回复:
引用 15 楼 sunyujia 的回复:
不好意思,误导群众了,进程的话,应该没戏,永远跳出不出jvm这个圈的. 
兄弟,你错了,其实是跳得出的,虽然暂时不采用这个多进程共享的方案,但我已经实现了: 
1.用一个进程去触发产生一个新的进程,当然是跑在另外一个虚拟机上了。 
2.在不同进程间进行对象的传送,包括socket对象 
不过这种方式有其缺憾之处:每个游戏各自建一个jar,那么,底层的图形引擎各自独立,包括lib不能共享,并且要以…

呵呵,强啊,jni辅助实现吗?高人啊,其实现在csdn的高人不常出现,很多都不再了,所以可能你得再等等了.我头一次听说可以实现,关注.

#27


单独启动一个JVM做Socket代理,也就是消费者。

其它要共享socket的,都直接和他通信,方法随意,可以是本地socket,rmi,webservice

总之,这个和我们局域网的代理服务器没有任何区别。

我们所有人上网,都是共享一个代理服务的。

OVER

#28


局域网的每个机器都是生产者,把各自的读取请求发送给代理

代理作为统一的消费者,安排执行顺序并返回结果。

发送的方法很多,比如设置网关,本地设置代理服务器,本地安装软件。

#29


由一个线程管理套接字就行咯......

#30


建立共享空间

#31


厉害

#32


高手!!

#33


学习

#34


帮顶!!!!!!!!!!!

#35


说得好啊,

#36


我觉得直接作为临界资源使用即可。

#37


关注

#38


不懂JAVA,是奔着题目来的。如果用VC来实现倒是很简单,创建一个基础COM的NT服务进程,在此进程中使用临界区保证原子一致性即可,如果是异步处理,还可以使用队列技术。
依稀记得JAVA也也自己的组件技术和互斥技术,也可以编写NT服务,为何不按上述思路进行呢?如果实现起来麻烦,那也完全可以先用VC编写该服务,然后由JAVA编写调用COM接口的客户端,这应该很简单吧?

#39


很牛的东东了哦,不懂

#40


学习中 
帮楼主顶一个 

#41


顶下

#42


vb 好

#43


等待高人现身...

#44


要说的都说了  只能帮顶了

#45


mark~一下,学习.~

#46


新手学习中。。。

#47


你的想法很好!
可惜实现不了!!!
呵呵,最好换个思路吧!

#48


建议你看看丹尼斯写的Unix,那告诉你怎么回事,以及为什么不能的原因.

#49


Mark!

#50


引用 20 楼 jiangguilong2000 的回复:
引用 18 楼 liang8305 的回复:
我要反问一下,设想一下,QQGame一开始运营的时候只有5个游戏,比如,双扣,杀人,放火,抢劫,偷窃;后来因为需求的原因想再加入另外四个游戏,但却不想去改动原先的代码(最多只在某个文件配置一下,告诉server我们又多了另外几个game),而在client,各个游戏和游戏大厅相互独立的,互相完全解耦,共享的是socket连接等,从扩展性角度来考虑,当然是这种方式好了,而你说的设计方式是把大厅和具体的游戏逻辑都捆绑在一起了,以后要扩展,加入游戏,就必须改动这些代码,这样的设计合理吗?


所以我说你还是没有理解OO,你还是停留在过程设计上
我的设计怎么会大厅和游戏捆绑在一起?
每个游戏的"游戏逻辑"可以完全不同,
只需要遵循一定的接口即可
例如说必须有一个start()方法用来运行游戏
然后有一个UserNotify()方法来接收用户的进出信息
这两个方法可以做成接口也可以写在父类"Game"中
然后具体的游戏例如 双扣就extends Game()

大厅要运行游戏只需要new XXGame().start()