tnl分析笔记之 CORBA 与假装自己是 CORBA

来源:互联网 发布:书目数据库有哪些 编辑:程序博客网 时间:2024/06/05 08:55

在仔细分析了tnl这个网络游戏lib之后, 最大的一个认识就是网络程序的架构,无论应用在哪个领域,都是一样的,都要有rpc和远程proxy,都是一种corba的架构,无论这些架构的名字真正叫什么.因为架构无非是编程规范的固定化,而规范是一种抽象认识,既然都是网络编程,问题域都是相同的,得出的解决方案也是差不多的,只不过因为应用领域的需求不同稍有变化罢了.网络编程的特殊需求就是.对网络环境要有极大的容忍度.所以不试图去隐藏网络通信本身的险恶环境,所以不能使用tcp这种假装什么问题都没有的协议,要有分级可靠的包传递方式...

tnl为了简化网络编程开发,实现了一个lightweight corba的架构,虽然这个corba 架构是假装的..只所以说是假装的是因为首先并没有idl帮你生成stub,得自己来继承了 event 类之后完成pack 和 unpack 方法将对象 属性写到 bitstream里头去,基本的 event 和 netobject 都可以在 pack unpack里头做 bitstream的 update 然后 基于 event 之上的 rpc 应用,也只是宏,帮你简化了event的编写.就这样...

call back func
Unpack is called on the destination side of the connection to read an event's data out of a packet.

 以下,rpc 宏应用:

    // Let the network system know this is a valid network connection.
    TNL_DECLARE_NETCONNECTION(SimpleEventConnection);

    // declare the client to server message
    TNL_DECLARE_RPC(rpcMessageClientToServer, (const char *theMessageString));被客户所调用而在服务端运行的,参数从对方来

    // declare the server to client message
    TNL_DECLARE_RPC(rpcMessageServerToClient, (const char *theMessageString));被服务端调用而在客户端运行的,参数从对方来
The first parameter to the macro is the name of the RPC method, which can be invoked like any other member function on the object. The second argument is a parenthesized argument list to the RPC.

TNL_IMPLEMENT_RPC(SimpleEventConnection, rpcMessageClientToServer, (const char *messageString),
NetClassGroupGameMask, RPCGuaranteedOrdered, RPCDirClientToServer, 0)

TNL_IMPLEMENT_RPC(SimpleEventConnection, rpcMessageServerToClient, (const char *messageString),
NetClassGroupGameMask, RPCGuaranteedOrdered, RPCDirServerToClient, 0)
一个  connection 只要客户发起就可以了,server只要接受就肯定用这个connection来做事,
而rpc是哪到哪里的,则有RPCDirClientToServer可以帮助界定,而执行逻辑上是由函数调用(rpc)界定的

这个问题是这样的在网络游戏设计里每一个bit的传输都是必须节省的.所以..这件事情程序员必须亲自完成....

但是在宏观角度网络游戏架构跟实际的orb架构都差不多,masterserver 是naming service,以及 event service 的结合体至于其他的..一般也用不上...

与tnl 相比较起来,raknet实在太裸了,socket这个关键字都
还保留着,只是薄薄的一层。
虽然各个lib都能实现最终的功能,程序员心中有剑的话做到最后都一样,但是那,我就直接用socket好了,
socket也很抽象其实。。ip加程序id就可以了。。

只能说网络游戏是网络程序的游戏应用而不是游戏的网络扩展,那种用各种editor编了个地图让人物在里头走之后就畅想着"扩充"成mmorpg的人.跟花痴一样.

原创粉丝点击