C\C++实现:在windows c下编程实现可以用复制SOCKET句柄WSADuplicateSocket或共享内存的方式,但在java中不知用何种方式,或者类似的方式,我search了一下,似乎JOMP说的是共享内存,但却不知如何使用。还有真的有必要用这种方式实现游戏平台和具体的游戏分离吗,有什么更好的实现方式呢?
160 个解决方案
#1
你可以把socket作为单一消费者。让所有要共享的做成生产者。
生产者负责产生命令,放到队列里面
消费者负责执行命令并填写执行结果
生产者负责产生命令,放到队列里面
消费者负责执行命令并填写执行结果
#2
竹子大哥说的很对,生产者消费者问题
http://blog.csdn.net/sunyujia/archive/2008/05/02/2362015.aspx
抛砖引玉
http://blog.csdn.net/sunyujia/archive/2008/05/02/2362015.aspx
抛砖引玉
#3
进程间共享 socket ?!好像比较难啊……你会有多个 JVM 进程吗?
#4
Java下面用NIO就可以了,全名就叫做New io,它使用的是reactor模式和多路复用技术。
简单的来说就是一个socket被监听,当发现有信息进入,那么监听实例报告,相应的handler来作处理。
虽然说是Reactor不过是按照event-driven 模式的。
你可以看看相关的文章,原理不难,实现也不难,不过一定要搞明白一些小细节。
http://gee.cs.oswego.edu/
这个人是线程编成大师,他现在好像是Nio的提倡者。
简单的来说就是一个socket被监听,当发现有信息进入,那么监听实例报告,相应的handler来作处理。
虽然说是Reactor不过是按照event-driven 模式的。
你可以看看相关的文章,原理不难,实现也不难,不过一定要搞明白一些小细节。
http://gee.cs.oswego.edu/
这个人是线程编成大师,他现在好像是Nio的提倡者。
#5
真TMD搞笑,就这样的问题也有人能答出来.在地球版的JAVA中,你要能在多进程*享socket,我给你一百万(太少了,应该给你一亿)月薪.
#6
哈,只能帮顶了.不会啊.
#7
只能是設置共享變量了。
#8
"进程" 间共享~~~~~~~~~??????
#9
学习中
先帮楼主顶一个
期待高手的到来
先帮楼主顶一个
期待高手的到来
#10
用ThreadLocal
自己看API
自己看API
#11
学习中
先帮楼主顶一个
期待高手的到来
先帮楼主顶一个
期待高手的到来
#12
建议你用mina异步传输框架机制。毕竟同一个入口,会产生线程阻塞或者影响效率!
#13
大哥们,是进程间共享socket对象,是进程而不是线程,是在不同的application,看清了没?
#14
顶,学习了
#15
不好意思,误导群众了,进程的话,应该没戏,永远跳出不出jvm这个圈的.
#16
JVM据我所知,没有什么高效的进程间的通信、共享机制。
因为,不同的操作系统,其进行间的通信、共享机制都有所不同,那么,
对于跨平台,可移植性,确实是一种挑战。
一般来讲,常见的Windows和Unix系统,都是基于线程的操作系统。
也就是说,CPU的时间片会按照系统的策略分配给每一个线程,而非进程。
那么,在没有什么特殊需求的情况下,我们都会选择多线程技术来编程,而非多进程技术。
还是说点有用的吧:
我想,楼主说的问题,应该是针对服务端的程序开发。
不知道,楼主对FTP协议是否有所了解。
我指的是,控制指令与实际文件传输使用不同Socket来传输。
(这样会使程序设计简单,逻辑会比较清晰)
所以,我当然也会推荐楼主采用这种思想,来设计游戏大厅与具体游戏的关系。
实际情况下, 如果游戏大厅和具体的游戏采用同一个Socket传输,那么,具体游戏的增删,会影响到通信协议的修改。
而且,客户端的编程,也会比较复杂。
Java的进程间通信,一般都是用TCP、UDP或者RMI之类的东西来实现的。所以,Socket共享,好象不太现实。
这种情况下,大厅服务器会起到类似Socket代理服务器的作用。(也就是说,如果是游戏的数据,它会转发到对应的游戏服务器上)
我推荐的程序架构是这样的:
大厅服务器与客户端采用一个Socket进行通信,各游戏采用各自的Socket进行通信(因为不同的游戏,通信数据不同,协议也不尽相同)。
大厅服务器上存放一些跟游戏服务器的相关信息(比如服务器状态,服务器IP,游戏端口之类的)
客户端的开发就比较结构清晰了。
首先,开发和大厅服务器的程序。
其次,当有新游戏要添加至大厅的时候。只要在大厅服务器上添加相关的信息就可以了。
因为,游戏的客户端程序与游戏服务器程序,本身可以相对独立的成为一个系统。
不知道我这样解释,楼主是否明白。
没有解决楼主的问题,实在不好意思。
因为,不同的操作系统,其进行间的通信、共享机制都有所不同,那么,
对于跨平台,可移植性,确实是一种挑战。
一般来讲,常见的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与游戏逻辑服务器进行通信,那么由此带来的玩家进入、退出、逃跑等消息会带来非常麻烦的数据同步问题,所以还暂定为一个。
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
专门处理数据的收发
然后是分工
划分好那些数据应该由那些类负责处理
你所说的玩家进入、退出、逃跑等消息,这时应该是大厅类所负责处理的
如果每个游戏都需要"知晓" "这类"消息,那就由大厅根据需要去通知每个游戏类
------------------------
你还是没有建立在OO的基础上思考你的设计
只要你是OO的,你就能区分游戏大厅和各类游戏,因为你有大厅类,各种游戏类
然后做好分工,你的每个类负责干一些什么事情
具体到你的需求
类的生成和分配
程序运行后肯定首先有大厅类的实例,然后根据用户选择,大厅类生成对应的游戏类实例,让其运行
你完全可以大家同用一个socket
先生成socket,再生成大厅,把socket传给大厅
大厅生成socket的时候,大厅再把socket传给游戏类
你也可以各自使用自己的socket
这样socket就由类自己去创建
你还可以创建一个socketHelper
专门处理数据的收发
然后是分工
划分好那些数据应该由那些类负责处理
你所说的玩家进入、退出、逃跑等消息,这时应该是大厅类所负责处理的
如果每个游戏都需要"知晓" "这类"消息,那就由大厅根据需要去通知每个游戏类
#19
另外,我不是太明白你为什么强调用进程而不能用线程?
是因为你要求分离,并把程序分成不同的文件包吧,然后大厅运行游戏的时候大厅excus()一个jar?
是因为你要求分离,并把程序分成不同的文件包吧,然后大厅运行游戏的时候大厅excus()一个jar?
#20
我要反问一下,设想一下,QQGame一开始运营的时候只有5个游戏,比如,双扣,杀人,放火,抢劫,偷窃;后来因为需求的原因想再加入另外四个游戏,但却不想去改动原先的代码(最多只在某个文件配置一下,告诉server我们又多了另外几个game),而在client,各个游戏和游戏大厅相互独立的,互相完全解耦,共享的是socket连接等,从扩展性角度来考虑,当然是这种方式好了,而你说的设计方式是把大厅和具体的游戏逻辑都捆绑在一起了,以后要扩展,加入游戏,就必须改动这些代码,这样的设计合理吗?
#21
理解的很对,我们想把具体游戏和大厅完全独立开来,做到正真的解耦,以后新添加游戏的话,最多在大厅的配置文件里加入这个游戏的名单就行.当然server端和client端的设计又有所区别。
#22
同19楼,我也没搞明白楼主干嘛用不同进程,我记得联众就是用你在这说的这种方式:
#23
兄弟,你错了,其实是跳得出的,虽然暂时不采用这个多进程共享的方案,但我已经实现了:
1.用一个进程去触发产生一个新的进程,当然是跑在另外一个虚拟机上了。
2.在不同进程间进行对象的传送,包括socket对象
不过这种方式有其缺憾之处:每个游戏各自建一个jar,那么,底层的图形引擎各自独立,包括lib不能共享,并且要以房间客户端做消息转发.
1.用一个进程去触发产生一个新的进程,当然是跑在另外一个虚拟机上了。
2.在不同进程间进行对象的传送,包括socket对象
不过这种方式有其缺憾之处:每个游戏各自建一个jar,那么,底层的图形引擎各自独立,包括lib不能共享,并且要以房间客户端做消息转发.
#24
兄弟,如果你说话算话的话,给我吧,我发源代码给你。
#25
考虑把图形引擎之类的东西做成dll呢?
#26
呵呵,强啊,jni辅助实现吗?高人啊,其实现在csdn的高人不常出现,很多都不再了,所以可能你得再等等了.我头一次听说可以实现,关注.
#27
单独启动一个JVM做Socket代理,也就是消费者。
其它要共享socket的,都直接和他通信,方法随意,可以是本地socket,rmi,webservice
总之,这个和我们局域网的代理服务器没有任何区别。
我们所有人上网,都是共享一个代理服务的。
OVER
其它要共享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接口的客户端,这应该很简单吧?
依稀记得JAVA也也自己的组件技术和互斥技术,也可以编写NT服务,为何不按上述思路进行呢?如果实现起来麻烦,那也完全可以先用VC编写该服务,然后由JAVA编写调用COM接口的客户端,这应该很简单吧?
#39
很牛的东东了哦,不懂
#40
学习中
帮楼主顶一个
帮楼主顶一个
#41
顶下
#42
vb 好
#43
等待高人现身...
#44
要说的都说了 只能帮顶了
#45
mark~一下,学习.~
#46
新手学习中。。。
#47
你的想法很好!
可惜实现不了!!!
呵呵,最好换个思路吧!
可惜实现不了!!!
呵呵,最好换个思路吧!
#48
建议你看看丹尼斯写的Unix,那告诉你怎么回事,以及为什么不能的原因.
#49
Mark!
#50
所以我说你还是没有理解OO,你还是停留在过程设计上
我的设计怎么会大厅和游戏捆绑在一起?
每个游戏的"游戏逻辑"可以完全不同,
只需要遵循一定的接口即可
例如说必须有一个start()方法用来运行游戏
然后有一个UserNotify()方法来接收用户的进出信息
这两个方法可以做成接口也可以写在父类"Game"中
然后具体的游戏例如 双扣就extends Game()
大厅要运行游戏只需要new XXGame().start()
#1
你可以把socket作为单一消费者。让所有要共享的做成生产者。
生产者负责产生命令,放到队列里面
消费者负责执行命令并填写执行结果
生产者负责产生命令,放到队列里面
消费者负责执行命令并填写执行结果
#2
竹子大哥说的很对,生产者消费者问题
http://blog.csdn.net/sunyujia/archive/2008/05/02/2362015.aspx
抛砖引玉
http://blog.csdn.net/sunyujia/archive/2008/05/02/2362015.aspx
抛砖引玉
#3
进程间共享 socket ?!好像比较难啊……你会有多个 JVM 进程吗?
#4
Java下面用NIO就可以了,全名就叫做New io,它使用的是reactor模式和多路复用技术。
简单的来说就是一个socket被监听,当发现有信息进入,那么监听实例报告,相应的handler来作处理。
虽然说是Reactor不过是按照event-driven 模式的。
你可以看看相关的文章,原理不难,实现也不难,不过一定要搞明白一些小细节。
http://gee.cs.oswego.edu/
这个人是线程编成大师,他现在好像是Nio的提倡者。
简单的来说就是一个socket被监听,当发现有信息进入,那么监听实例报告,相应的handler来作处理。
虽然说是Reactor不过是按照event-driven 模式的。
你可以看看相关的文章,原理不难,实现也不难,不过一定要搞明白一些小细节。
http://gee.cs.oswego.edu/
这个人是线程编成大师,他现在好像是Nio的提倡者。
#5
真TMD搞笑,就这样的问题也有人能答出来.在地球版的JAVA中,你要能在多进程*享socket,我给你一百万(太少了,应该给你一亿)月薪.
#6
哈,只能帮顶了.不会啊.
#7
只能是設置共享變量了。
#8
"进程" 间共享~~~~~~~~~??????
#9
学习中
先帮楼主顶一个
期待高手的到来
先帮楼主顶一个
期待高手的到来
#10
用ThreadLocal
自己看API
自己看API
#11
学习中
先帮楼主顶一个
期待高手的到来
先帮楼主顶一个
期待高手的到来
#12
建议你用mina异步传输框架机制。毕竟同一个入口,会产生线程阻塞或者影响效率!
#13
大哥们,是进程间共享socket对象,是进程而不是线程,是在不同的application,看清了没?
#14
顶,学习了
#15
不好意思,误导群众了,进程的话,应该没戏,永远跳出不出jvm这个圈的.
#16
JVM据我所知,没有什么高效的进程间的通信、共享机制。
因为,不同的操作系统,其进行间的通信、共享机制都有所不同,那么,
对于跨平台,可移植性,确实是一种挑战。
一般来讲,常见的Windows和Unix系统,都是基于线程的操作系统。
也就是说,CPU的时间片会按照系统的策略分配给每一个线程,而非进程。
那么,在没有什么特殊需求的情况下,我们都会选择多线程技术来编程,而非多进程技术。
还是说点有用的吧:
我想,楼主说的问题,应该是针对服务端的程序开发。
不知道,楼主对FTP协议是否有所了解。
我指的是,控制指令与实际文件传输使用不同Socket来传输。
(这样会使程序设计简单,逻辑会比较清晰)
所以,我当然也会推荐楼主采用这种思想,来设计游戏大厅与具体游戏的关系。
实际情况下, 如果游戏大厅和具体的游戏采用同一个Socket传输,那么,具体游戏的增删,会影响到通信协议的修改。
而且,客户端的编程,也会比较复杂。
Java的进程间通信,一般都是用TCP、UDP或者RMI之类的东西来实现的。所以,Socket共享,好象不太现实。
这种情况下,大厅服务器会起到类似Socket代理服务器的作用。(也就是说,如果是游戏的数据,它会转发到对应的游戏服务器上)
我推荐的程序架构是这样的:
大厅服务器与客户端采用一个Socket进行通信,各游戏采用各自的Socket进行通信(因为不同的游戏,通信数据不同,协议也不尽相同)。
大厅服务器上存放一些跟游戏服务器的相关信息(比如服务器状态,服务器IP,游戏端口之类的)
客户端的开发就比较结构清晰了。
首先,开发和大厅服务器的程序。
其次,当有新游戏要添加至大厅的时候。只要在大厅服务器上添加相关的信息就可以了。
因为,游戏的客户端程序与游戏服务器程序,本身可以相对独立的成为一个系统。
不知道我这样解释,楼主是否明白。
没有解决楼主的问题,实在不好意思。
因为,不同的操作系统,其进行间的通信、共享机制都有所不同,那么,
对于跨平台,可移植性,确实是一种挑战。
一般来讲,常见的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与游戏逻辑服务器进行通信,那么由此带来的玩家进入、退出、逃跑等消息会带来非常麻烦的数据同步问题,所以还暂定为一个。
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
专门处理数据的收发
然后是分工
划分好那些数据应该由那些类负责处理
你所说的玩家进入、退出、逃跑等消息,这时应该是大厅类所负责处理的
如果每个游戏都需要"知晓" "这类"消息,那就由大厅根据需要去通知每个游戏类
------------------------
你还是没有建立在OO的基础上思考你的设计
只要你是OO的,你就能区分游戏大厅和各类游戏,因为你有大厅类,各种游戏类
然后做好分工,你的每个类负责干一些什么事情
具体到你的需求
类的生成和分配
程序运行后肯定首先有大厅类的实例,然后根据用户选择,大厅类生成对应的游戏类实例,让其运行
你完全可以大家同用一个socket
先生成socket,再生成大厅,把socket传给大厅
大厅生成socket的时候,大厅再把socket传给游戏类
你也可以各自使用自己的socket
这样socket就由类自己去创建
你还可以创建一个socketHelper
专门处理数据的收发
然后是分工
划分好那些数据应该由那些类负责处理
你所说的玩家进入、退出、逃跑等消息,这时应该是大厅类所负责处理的
如果每个游戏都需要"知晓" "这类"消息,那就由大厅根据需要去通知每个游戏类
#19
另外,我不是太明白你为什么强调用进程而不能用线程?
是因为你要求分离,并把程序分成不同的文件包吧,然后大厅运行游戏的时候大厅excus()一个jar?
是因为你要求分离,并把程序分成不同的文件包吧,然后大厅运行游戏的时候大厅excus()一个jar?
#20
我要反问一下,设想一下,QQGame一开始运营的时候只有5个游戏,比如,双扣,杀人,放火,抢劫,偷窃;后来因为需求的原因想再加入另外四个游戏,但却不想去改动原先的代码(最多只在某个文件配置一下,告诉server我们又多了另外几个game),而在client,各个游戏和游戏大厅相互独立的,互相完全解耦,共享的是socket连接等,从扩展性角度来考虑,当然是这种方式好了,而你说的设计方式是把大厅和具体的游戏逻辑都捆绑在一起了,以后要扩展,加入游戏,就必须改动这些代码,这样的设计合理吗?
#21
理解的很对,我们想把具体游戏和大厅完全独立开来,做到正真的解耦,以后新添加游戏的话,最多在大厅的配置文件里加入这个游戏的名单就行.当然server端和client端的设计又有所区别。
#22
同19楼,我也没搞明白楼主干嘛用不同进程,我记得联众就是用你在这说的这种方式:
#23
兄弟,你错了,其实是跳得出的,虽然暂时不采用这个多进程共享的方案,但我已经实现了:
1.用一个进程去触发产生一个新的进程,当然是跑在另外一个虚拟机上了。
2.在不同进程间进行对象的传送,包括socket对象
不过这种方式有其缺憾之处:每个游戏各自建一个jar,那么,底层的图形引擎各自独立,包括lib不能共享,并且要以房间客户端做消息转发.
1.用一个进程去触发产生一个新的进程,当然是跑在另外一个虚拟机上了。
2.在不同进程间进行对象的传送,包括socket对象
不过这种方式有其缺憾之处:每个游戏各自建一个jar,那么,底层的图形引擎各自独立,包括lib不能共享,并且要以房间客户端做消息转发.
#24
兄弟,如果你说话算话的话,给我吧,我发源代码给你。
#25
考虑把图形引擎之类的东西做成dll呢?
#26
呵呵,强啊,jni辅助实现吗?高人啊,其实现在csdn的高人不常出现,很多都不再了,所以可能你得再等等了.我头一次听说可以实现,关注.
#27
单独启动一个JVM做Socket代理,也就是消费者。
其它要共享socket的,都直接和他通信,方法随意,可以是本地socket,rmi,webservice
总之,这个和我们局域网的代理服务器没有任何区别。
我们所有人上网,都是共享一个代理服务的。
OVER
其它要共享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接口的客户端,这应该很简单吧?
依稀记得JAVA也也自己的组件技术和互斥技术,也可以编写NT服务,为何不按上述思路进行呢?如果实现起来麻烦,那也完全可以先用VC编写该服务,然后由JAVA编写调用COM接口的客户端,这应该很简单吧?
#39
很牛的东东了哦,不懂
#40
学习中
帮楼主顶一个
帮楼主顶一个
#41
顶下
#42
vb 好
#43
等待高人现身...
#44
要说的都说了 只能帮顶了
#45
mark~一下,学习.~
#46
新手学习中。。。
#47
你的想法很好!
可惜实现不了!!!
呵呵,最好换个思路吧!
可惜实现不了!!!
呵呵,最好换个思路吧!
#48
建议你看看丹尼斯写的Unix,那告诉你怎么回事,以及为什么不能的原因.
#49
Mark!
#50
所以我说你还是没有理解OO,你还是停留在过程设计上
我的设计怎么会大厅和游戏捆绑在一起?
每个游戏的"游戏逻辑"可以完全不同,
只需要遵循一定的接口即可
例如说必须有一个start()方法用来运行游戏
然后有一个UserNotify()方法来接收用户的进出信息
这两个方法可以做成接口也可以写在父类"Game"中
然后具体的游戏例如 双扣就extends Game()
大厅要运行游戏只需要new XXGame().start()