F fzbxh Unregistered / Unconfirmed GUEST, unregistred user! 2009-02-01 #1 接收到客户端的一个命令,如AT2009,将2009年的各类信息发送到客户端,但同时会有十多个客户端发送这样的请求,请问我是否应为每个客户开一个发送线程呢?
S smlabc Unregistered / Unconfirmed GUEST, unregistred user! 2009-02-01 #2 什么叫完成端口?应用处理和发送接收是分开的,你创建的时候就有创建CPU数量*N的线程来做发送和接收处理,怎么还需要另外开线程?看不懂你的逻辑
一 一只没有缺点的狼 Unregistered / Unconfirmed GUEST, unregistred user! 2009-02-01 #3 一般把通讯层队列化(IOCP负责排队),业务层池化(每个业务请求一个线程负责处理,并把线程池化)。发送的时候,采用分包的形式,一般每次发送不超过8192字节,发送完成后,再发送下一个包,以防止某个业务过多的占用带宽。也就是说你的1M多数据,也分多次发送完成。如果你一次发送1M多,将大量占用带宽,导致其他的连接无法正常通讯。
一般把通讯层队列化(IOCP负责排队),业务层池化(每个业务请求一个线程负责处理,并把线程池化)。发送的时候,采用分包的形式,一般每次发送不超过8192字节,发送完成后,再发送下一个包,以防止某个业务过多的占用带宽。也就是说你的1M多数据,也分多次发送完成。如果你一次发送1M多,将大量占用带宽,导致其他的连接无法正常通讯。
F fzbxh Unregistered / Unconfirmed GUEST, unregistred user! 2009-02-01 #4 不好意思,我对完成端口这块不是非常了解的,我就是在想,当一个客户发送信息过来后,我还得连数据库,还得统计,然后再发送,这个时间可能会有点长,特别是一个大信息包.是不是我用for i:=0 to 1024 do 这样的方法,分批发送?
不好意思,我对完成端口这块不是非常了解的,我就是在想,当一个客户发送信息过来后,我还得连数据库,还得统计,然后再发送,这个时间可能会有点长,特别是一个大信息包.是不是我用for i:=0 to 1024 do 这样的方法,分批发送?
一 一只没有缺点的狼 Unregistered / Unconfirmed GUEST, unregistred user! 2009-02-02 #5 一个服务器的正常过程,a、接收客户端请求-->b、处理客户端请求-->c、发送请求结果给客户端。其中a->b大部分的服务器程序都是异步的,可以通过PostMessage/PostThreadMessage/QueueUserAPC等方法交给其他的线程执行,这时候要把客户端的环境传递过去,当处理客户端请求完成之后,由处理请求的线程把请求结果放到传输队列中,传输队列(IOCP)负责把结果转递到指定的客户端。这个请求结果如果很大的时候,必须进行分包处理。如果把结果分成3个包,发送完1包、然后发送2包,以此类推。客户端可以选择所有的包都接收完一起显示,或者受到一个包,就显示一个包,通讯不只是接收发送,封包也是很重要的一部分。
一个服务器的正常过程,a、接收客户端请求-->b、处理客户端请求-->c、发送请求结果给客户端。其中a->b大部分的服务器程序都是异步的,可以通过PostMessage/PostThreadMessage/QueueUserAPC等方法交给其他的线程执行,这时候要把客户端的环境传递过去,当处理客户端请求完成之后,由处理请求的线程把请求结果放到传输队列中,传输队列(IOCP)负责把结果转递到指定的客户端。这个请求结果如果很大的时候,必须进行分包处理。如果把结果分成3个包,发送完1包、然后发送2包,以此类推。客户端可以选择所有的包都接收完一起显示,或者受到一个包,就显示一个包,通讯不只是接收发送,封包也是很重要的一部分。