我正要着手做一个可以让3000-5000人同时在线的服务器端程序(100分)

  • 主题发起人 主题发起人 songmk
  • 开始时间 开始时间
没错.. 网络游戏的数据流量每客户端也在4-6KB/s左右
 
我也想做一这样的软件,
那么多的连接,
肯定要用到C/S型数据库吧?
想QQ这类软件,
每天都有几十万用户,
他是采用什么技术?
 
QQ用的是UDP,他的几十万同时在线和网络游戏的同时在线不属于同一个问题的范畴,QQ只是起了一个中介的角色,大部分的连接是P2P的,就是用户到用户直接连接. 只有在用户到用户之间的连接不通,信息才会发给服务器进行保存转发.
C/S数据库?? 那是服务器后台那边自己用到的, 和用户直接连接都要靠自己制定的通讯协议,C/S啊,估计同时连上几十个你的服务器就不行了...用用用不上.
 
谢谢bluely!
你的QQ是多少?
 
QQ是UDP的,UDP是无连接的,所以它能够支持更多的客户端。
 
use ACE c++ library
 
谁帮我看看我的client的代码, 用的ICS的WSocket
怎么不发送数据到服务器?

unit SktThr;


interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,WSocket;

type


TSktThread = class(TThread)
private
FProgress : String;
procedure UpdateStatus;
procedure ShowProgress;
procedure Progress(Msg : String);
procedure DataAvailable(Sender: TObject; Error: Word); //接收到数据
published
procedure Setup(i: Integer);
procedure Execute; override;
public
FAddr : String;
FPort : String;
FThreadNumber : Integer;
FWSocket : TWSocket;
Success : Boolean;
end;

implementation

uses Unit1;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSktThread.Setup(i: Integer);
begin
FThreadNumber := i;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSktThread.UpdateStatus;
begin
SktThreadForm.ProcessResults(FThreadNumber, Success);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSktThread.ShowProgress;
begin
SktThreadForm.ProgressListBox.lines.Add(FProgress);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSktThread.Progress(Msg : String);
begin
FProgress := Msg;
SynChronize(ShowProgress);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSktThread.Execute;
begin
FWSocket := TWSocket.Create(Nil);
FWSocket.MultiThreaded := TRUE;
FWSocket.OnDataAvailable := DataAvailable;
while not Terminated do begin
Progress(IntToStr(FThreadNumber) + ' Start send');
with FWSocket do begin
Addr := FAddr;
Port := FPort;
try
Connect; // Connect to Server
Success := TRUE;
Progress(IntToStr(FThreadNumber) + ' Connect server successfully!');
SendStr('hello,my server!');
except
Success := FALSE;
end;

end;
// while 1=1 do
// begin
// SendStr('hello,my server!');
// sleep(200);
// end;

if not Terminated then
Synchronize(UpdateStatus);

end;


FWSocket.Free;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TSktThread.DataAvailable(Sender: TObject; Error: Word);
var
Buf : PChar;
Cli : TWSocket;
Len : Integer;
Cnt : Integer;
begin
Cli := Sender as TWSocket;
Cnt := Cli.RcvdCount;
if Cnt <= 0 then
Exit;
{$IFDEF VER80}
{ Delphi 1 has 255 character limit of strings (StrPas below) }
if Cnt > 254 then
Cnt := 254;
{$ENDIF}
GetMem(Buf, Cnt + 1);
try
Len := Cli.Receive(Buf, Cnt);
if Len > 0 then begin
Buf[Cnt] := #0;
Progress('线程号:'+IntToStr(FThreadNumber)+' Received: ' + StrPas(Buf));
end;
finally
FreeMem(Buf, Cnt + 1);
end;
end;


end.
 
to shgproduct, 同意什么?
 
to barton: 给我发份源码好吗
undeadbirds@vip.sina.com
收到后给分
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1989631
 
客户端?你的WSocket是用的消息模式?(不好意思,我没用过ICS)你的线程只能通过
Terminated := False来终止。出了错误怎么办?比如服务器根本连不上。其实我认为不
需要使用线程。要用也可以,但线程的功能必须尽量简单。
 
我给你发的代码中含有客户端。
 
ICS没用过,不过客户端建议采用非阻塞的
 
to: barton
我明天好好看看代码 谢谢
分当然会给你
http://www.delphibbs.com/delphibbs/dispq.asp?lid=717787
http://www.delphibbs.com/delphibbs/dispq.asp?lid=756885
这两个你去回复一下,我把分给你 上面的两个问题我都自己解决了
 
一、本人简历:
所学专业是工业与民用建筑,于95年参加工作,具体工作是建筑施工、统计(固定资产、建设部组织的城市建设统计和房地产统计)、工程预结算、工程质量监督、房地产开发估价和可行性分析报告、档案管理、房屋安全鉴定。
利用业余时间,96年开始学习foxbase、foxpro、c、asm,98年开始学习delphi,用delphi编制“房屋安全鉴定管理系统”,还未完成,由于建设部颁布新的行业标准《危险房屋鉴定标准》而半途而废,2000年开始编制《房地产开发管理系统》,断断续续,终于在2002年8月完成,2002年底重新编制《房屋安全鉴定管理系统》,
虽然还未最后完成,但于2003年4月开始投入使用(试用,有待改进)。
2002年12月学习VC++,2003年4月开始使用VC++6.0编制一个数据库的通用框架(通用解决方案,基于多文档/多视图结构,里面含类似电子表格的视图),可以利用此框架解决在VC++中利用ADO、>DAO、ODBC、OLE-DB连接数据库的问题(在编译时定义不同的编译选项开关参数,少部分改动即可),到现在为止,已完成界面,具体的业务编码还未完成。现准备利用此框架编制《房屋安全大检查数据库》。
二、合作:
由于本人兼职的工作性质,只能与有关的电脑公司(或个人)进行合作,合作的方式有两种:
1、产品由本人开发,版权属本人,开发成功后由电脑公司(或个人)进行营销。
2、本人将源代码卖给电脑公司(或个人),版权分两种,一是本人不放弃版权,本人有权再销售或再开发;二是本人完全放弃版权,但源程序的售价高。
三、《房地产开发估价管理系统 2.0》的合作
《房地产开发估价管理系统 2.0》的产品含一张光盘、一张钥匙盘、一本使用手册,产品的初步定价是2800元,本人与合作者按5:5分成,由合作者进行销售。
源代码的销售请有意向者出个价,本人会该出手时会出手。
具体的合作事宜,请有意向者详细洽谈。


广西梧州市 邹才明
cmzou@21cn.com
 
to: zouming,
请不要在本贴灌水
 
还是看不懂,再顶,
都NB :)
 
他媽的,那費人,
在這里做廣告的.
 
http://www.eping.net/fourm/dispbbs.asp?boardID=15&ID=650
一个完全成端口的例子
我在双至强700,1G内存,100M网络带宽的服务器中测试了一下
最多可以有大约1990左右连接数,CPU占用率为50%左右,绝对无法达到2000个连接。

出错提示为:
Thread Creation Error:存储空间不足,无法处理此命令。
 
后退
顶部