服务器网络编程注意事项

不管什么服务器,也不管你用什么语言开发服务器。这些都要注意。(如果方法不一样,那只是语言给你封装好了。)

  1. 每个服务器在创建 的时候 都会 有 Listen这个或者功能。服务器开始监听链接。其中里面有个int 类型的参数。我在之前一直以为,这个int类型 表示的 是 可以链接的客户数量,其实不然,这个是每毫秒可以用户访问的并发数量。 比如,在同一毫秒时间宽度内,有三个客户同时链接,而这个参数确实2。那么这一毫秒他就只接收两个客户的请求。

  2. 然后会调用accept这个方法。 通常会有一个参数是你 刚才已经在监听模式的Socket的句柄。 还有两个参数会是链接进来的客户端的 地址。 然他会有一个返回值。或者你所使用的语言已经封装了这个返回值。 这个不重要 。 重要的是,每次有个新用户链接, 他都会重新生成一个新的Socket 的 句柄,用来专门和这个客户端进行收发数据和关闭链接等等操作。 而 第一次原先的那个socket 还会进行他等待其他客户端链接请求的使命。

  3. (2)中我们知道。每次一个客户端的链接,都是实例一个新的Socket,而每一个Socket 都是会占用一个端口的,只是他在实例的时候会自动选择未被占用的端口。这样,如果你的游戏服务应用,数据库服务应用,什么商场服务应用,用户信息服务应用等等……各种服务应用都在一个服务器上面运行。这样就会很消耗服务器的承载量,会造成明显的延时卡顿,如果你使用了各种优化,各种策略之后还是会造成极大的网络延时,那么,就把他们 分别部署到不同的 服务器上面吧

  4. 大型网络游戏,如果客户访问量够大的话,需要引用一个集群化的方法,把所有链接请求分发出去。所有的服务器 由功能可以分为“前置接收任务”,“后置处理任务”两组服务器。“接收任务”负责接收客户端的 任务请求,然后查看 “处理任务“服务器组那个服务器空闲,空闲则直接由这个 服务器 来完成 用户 ”任务“。这样就可以保障一台服务器概念下永远不会超过自己的承载量。

  5. 要注意的是在数据的收发方法 int send(...); int recv(...);中。(C++语言)其中参数 类型 Char*是表示提供数据缓冲的类型。虽然函数原型中注明是Char*类型,但是实际上可以接收任何类型的缓冲指针并做强制类型转化即可
    那为什么还要用Char*这一类型呢,其实在在早期的时候 C++语言中没有 Void* 这个概念。然后后期才加入的。而这个Void*在C++语言中又明确规定: 任何类型的指针,都可以转化为Void*
    那么其实,这个Char* 你完全可以看做是Void*

  6. 在收发数据的时候需要注意。一方调用Send发送的时候,另一方应该调用Recv接收。如果两端同时 Send 或者 Recv 那么稍后一端的调用就会失败。 如果Recv调用指定的缓冲过于小的时候,一般这时候返回值是实际接收的字节数,当这个值等于缓冲长度的时候,要考虑循环调用Recv直到返回值小于缓冲长度,以接收所有的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值