服务器网络编程注意事项
2017-11-07 17:30
274 查看
不管什么服务器,也不管你用什么语言开发服务器。这些都要注意。(如果方法不一样,那只是语言给你封装好了。)
每个服务器在创建 的时候 都会 有 Listen这个或者功能。服务器开始监听链接。其中里面有个int 类型的参数。我在之前一直以为,这个int类型 表示的 是 可以链接的客户数量,其实不然,这个是每毫秒可以用户访问的并发数量。 比如,在同一毫秒时间宽度内,有三个客户同时链接,而这个参数确实2。那么这一毫秒他就只接收两个客户的请求。然后会调用
accept这个方法。 通常会有一个参数是你 刚才已经在监听模式的Socket的句柄。 还有两个参数会是链接进来的客户端的 地址。 然他会有一个返回值。或者你所使用的语言已经封装了这个返回值。 这个不重要 。 重要的是,每次有个新用户链接, 他都会重新生成一个新的Socket 的 句柄,用来专门和这个客户端进行收发数据和关闭链接等等操作。 而 第一次原先的那个socket 还会进行他等待其他客户端链接请求的使命。
(2)中我们知道。每次一个客户端的链接,都是实例一个新的Socket,而每一个Socket 都是会占用一个端口的,只是他在实例的时候会自动选择未被占用的端口。这样,如果你的游戏服务应用,数据库服务应用,什么商场服务应用,用户信息服务应用等等……各种服务应用都在一个服务器上面运行。这样就会很消耗服务器的承载量,会造成明显的延时卡顿,如果你使用了各种优化,各种策略之后还是会造成极大的网络延时,那么,就把他们 分别部署到不同的 服务器上面吧
大型网络游戏,如果客户访问量够大的话,需要引用一个
集群化的方法,把所有链接请求分发出去。所有的服务器 由功能可以分为“前置接收任务”,“后置处理任务”两组服务器。“接收任务”负责接收客户端的 任务请求,然后查看 “处理任务“服务器组那个服务器空闲,空闲则直接由这个 服务器 来完成 用户 ”任务“。这样就可以保障一台服务器概念下永远不会超过自己的承载量。
要注意的是在数据的收发方法
int send(...); int recv(...);中。(C++语言)其中参数 类型
Char*是表示提供数据缓冲的类型。虽然函数原型中注明是
Char*类型,但是实际上可以接收任何类型的缓冲指针并做强制类型转化即可。
那为什么还要用
Char*这一类型呢,其实在在早期的时候 C++语言中没有
Void*这个概念。然后后期才加入的。而这个
Void*在C++语言中又明确规定: 任何类型的指针,都可以转化为
Void*。
那么其实,这个
Char*你完全可以看做是
Void*。
在收发数据的时候需要注意。一方调用Send发送的时候,另一方应该调用Recv接收。如果两端同时 Send 或者 Recv 那么稍后一端的调用就会失败。 如果Recv调用指定的缓冲过于小的时候,一般这时候返回值是实际接收的字节数,当这个值等于缓冲长度的时候,要考虑循环调用Recv直到返回值小于缓冲长度,以接收所有的数据。
相关文章推荐
- android网络编程注意事项之一:移动网络下,防止网络超时甚至连接不上,解决办法--为网络请求设置代理
- java编程的一些注意事项,网络资源总结
- WIN网络编程-IOCP服务程序设计注意事项
- ACE网络服务器程序开发注意事项
- Java网络编程注意事项1
- Java网络编程注意事项3
- android网络编程注意事项之一:移动网络下,防止网络超时甚至连接不上,解决办法--为网络请求设置代理
- Linux网络编程----bind自动获取自己的IP和PORT,端口使用的注意事项
- 网络游戏服务器注意事项,优化措施
- 关于java多线程网络编程的注意事项!
- 网络编程的注意事项
- 第一部分第三章 网络驱动器编程注意事项
- Android 第五天重置版_网络编程2_注意事项
- android网络编程注意事项之一:移动网络下,防止网络超时甚至连接不上,解决办法--为网络请求设置代理
- android网络编程注意事项之一:移动网络下,防止网络超时甚至连接不上,解决办法--为网络请求设置代理
- 网络游戏服务器注意事项,优化措施
- android网络编程注意事项之一:移动网络下,防止网络超时甚至连接不上,解决办法--为网络请求设置代理
- Linux下Socket网络编程send和recv使用注意事项
- Linux下Socket网络编程send和recv使用注意事项
- 编程注意事项(2010.12.25)