游戏开发论坛

 找回密码
 立即注册
搜索
楼主: sjinny

我写的网络模块,大家来看看,不用也来讨论讨论……

[复制链接]

12

主题

112

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2009-5-25 17:29:00 | 显示全部楼层

Re:我写的网络模块,大家来看看,不用也来讨论讨论……

“对客户端的连接跟对服务器的连接区分对待”主要是我觉得面向其实网络游戏的连接需求还是比较复杂的,现在不可能大家都用小型机或者大型机去做游戏的服务器,更多的人采用的还是1,2W的服务器,这种机器要支持比如10W个客户端的连接估计就会比较难了。所以我觉得服务器和服务器之间的连接会简单些,而服务器端接收客户端连接的时候可能就不是仅仅是建立进程间连接就可以了,会需要一些稍微复杂点的策略。如果仅仅提供进程间连接的功能的话,如果再提供灵活接口,上层也能组合出他的需求来。但是这样做就和直接调用底层又没有太大区别了。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2009-5-25 17:37:00 | 显示全部楼层

Re:我写的网络模块,大家来看看,不用也来讨论讨论……

是的,系统调用的次数要尽量减少。
我目前的策略是这样的:
主循环挂在epoll_wait上。对于一个连接,当它有数据想发送、并可以发送时,就会发送。
当发送缓存里有数据时,即使这个数据量非常小,那么只要能够立即send,那么就会立即send。
实际上,对于网络底层是没有包的概念的,只有数据流的概念,而说到组包,我的理解就是当待发数据量太小时,即使能够立即发送也会等待,等到待发数据量积累到一定程度时再一起发出,或者等到超时发出。
对于netgate,它提供的接口是iostream风格的,也就是用<<来写入数据、用>>来读出数据,当然并不是每次<<调用都会对应一次send,一次<<只是把数据写入连接的发送缓存,当<<一个flush时(其实就是调用connection对象的flush函数),会调用send,如果用户没有输入flush,那么就会在回到主循环的时候检查,如果这个连接有待发数据并且可以向外发送,那么也会立即send。

12

主题

112

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2009-5-25 17:38:00 | 显示全部楼层

Re:我写的网络模块,大家来看看,不用也来讨论讨论……

当然也不排除有人比较有钱的就上小型机或者大型机了,如果这种情况下,他的服务器架构可能又不一样,他的对于网络模块的要求可能会少些。我觉得做通用的网络连接挺难的,最后就发现只是对OS的简单封装了。相对来说有针对性的解决某种类型的服务器架构的网络连接会简单些。个人看法。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2009-5-25 17:40:00 | 显示全部楼层

Re:我写的网络模块,大家来看看,不用也来讨论讨论……

呃……其实即使是单纯的网关服务器,有多少游戏需要单机就撑10W的?
服务器和客户端之间的连接可以有些什么样的策略呢?上层的需求有什么是需要特殊支持的呢?

12

主题

112

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2009-5-25 17:44:00 | 显示全部楼层

Re:我写的网络模块,大家来看看,不用也来讨论讨论……

有人会使用多网关来解决海量连接的问题。

12

主题

112

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2009-5-25 17:45:00 | 显示全部楼层

Re:我写的网络模块,大家来看看,不用也来讨论讨论……

当然这个多网关的策略可以说是服务器架构的问题,也可以说是网络连接的问题。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2009-5-25 17:50:00 | 显示全部楼层

Re:我写的网络模块,大家来看看,不用也来讨论讨论……

多网关也是分布在多台机器上的吧,毕竟单机上10W已经很牛了……
netgate做多网关也很容易,毕竟是作为独立进程运行的。

15

主题

368

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
发表于 2009-5-26 11:21:00 | 显示全部楼层

Re:我写的网络模块,大家来看看,不用也来讨论讨论……

可以认为基本上没有任何实用价值。

至少得让使用者知道,网络连接断开了吧!(有实际应用中可以不需要知道网络连接是否断开的“网络应用程序”么)

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2009-5-26 12:47:00 | 显示全部楼层

Re:我写的网络模块,大家来看看,不用也来讨论讨论……

使用者是可以知道的,因为网络断开时会通知插件,插件可以自己选择一定的方式告知外界的功能进程:可以是简单的断开与功能进程的管道,这样功能进程就会读到EOF;也可以是给功能进程发送一定的数据进行通知。当然,如果插件自己就能做好处理,那就不需要通知功能进程,而一般情况下至少也不用通知所有功能进程。
基本的情况就是,使用者可以自己定制,所有的网络事件都是会告诉插件的。

4

主题

64

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2009-5-26 16:59:00 | 显示全部楼层

Re:我写的网络模块,大家来看看,不用也来讨论讨论……

这次不翻,下次翻
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 04:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表