|
Doh, synchronous perfoms better, but asynchronous offers much better scalability.
Then, it depends on what you want - if you have only one client, then synchronous will be the choice, if the number of clients is unknowns or more than 2-3, async is the choice.
Async is much harder to code, because humans usually don't think async.
|
|
|
|
|
Thanks !
But why 2-3 clients is the boundary ?
And are there any reference for programming async server ?
|
|
|
|
|
Well, it's not exactly 2-3, it's just the range, where it can be acceptable and because if you have 4 clients, you usually have 5 next day, then 6 and after month you'll find yourself having trouble with 100...
Problem with synchronous access, is that it needs generally one thread per client behavior and then they became a resource hog, because a lot of time is spent by creating/destructing these threads and by switching between them.
Ideal ratio is one thread per one cpu, although this is of course unrealistic, but more threads means more work in the OS, hence less cpu time for application.
look here, at the section internet&networks on codeproject for more details and even tutorials:
http://www.codeproject.com/internet/[^]
|
|
|
|
|
Really good question...
Geo states right one regarding one client and multiple client request. I would recommend asynchoronous if you have multiple clients.. But Now you have to think about the right choices of choosing a thread option.
Option 1:
1. You can handle multiple client request in one thread!!! by using windows socket overlapped, or messaging socket communication technologies. Microsoft provides better support to work with one thread but multiple socket connection. I think you can handle maximum of 64 client connections in one thread.. (I may be wrong). But to be careful, this choice won't always good to any solution.. You have to workout whether this technique is suitable for you or not.
2. If you opt for single thread per connection, this seems to be good, but this will screw your application, system performance. Suppose say, your server handles 1000 request at a time, you have to create 1000 threads to handle this.. But still you have choice.. You can use thread pooling, instead of creating a thread each time, you can use existing thread one the connected client disconnected.. Again this is painful approach, but this would increase performance of the system..
3. Mix of option one and Two. Having thread pool + one thread will handle multple sockets
This is really very good to discuss, I would appreciate if you guys add more points to this topic...
" Action without vision is only passing time,
Vision without action is merely day dreaming,
But vision with action can change the world "
- Words from Nelson Mandela
Thanks & Regards,
Gopalakrishnan
|
|
|
|
|
Hello,
Are there any standards for designing form or form builder. I need
to write a form designer so that user can design and custom their own
form in the application ? It is fine to write it in c#, but I want to know
if I need to conform to some standards in the market, so to make my application more universal and better compatitibility ?
Many thanks
|
|
|
|
|
I face a problem when I click the maximize button of the dialog that I have designed. The dialog will maximize when I click the button but for all the edit box and buttons inside the dialog did not automatically maximize. How can I solve this problem?
|
|
|
|
|
of course it is!
wo should override the function OnSize() to catch the message and in the function you modify the buttons' size dynamically by yourself
路漫漫其修远兮,吾将上下而求索。
|
|
|
|
|
|
Hi. I need to convert char* to UCHAR[]. Specifically: from a Loadstring to a UCHAR []. Any suggestions?
|
|
|
|
|
|
Did that. It said "error C2440: '=' : cannot convert from 'UCHAR *' to 'UCHAR [256]'". I need it to be converted to UCHAR [256].
|
|
|
|
|
can you give me a code snippet so I can see more specifically what you want to do? Thanks
|
|
|
|
|
Here's what I'm trying to do:
This code cannot be changed. It works for other purposes, such as char arrays, as well as needing this code to work for UCHAR arrays.
//
CCharHandler::CCharHandler(int res,int size,char *Def)
{
if(size<256)
{
memset(BufferLoadString,0,size);
HMODULE hReferenceLib = LoadLibrary("c:\\DLLCreated.dll");
if(hReferenceLib != NULL)
{
LoadString(hReferenceLib,res,BufferLoadString,size);
FreeLibrary(hReferenceLib);
if(BufferLoadString==NULL)
strncpy(BufferLoadString,Def,size);
}
else
strncpy(BufferLoadString,Def,size);
}
}
//
This code is replaceable. Type of variable is not:
//
UCHAR testchar[] = "OK\r";
//
The string inside quotes is what needs to be replaced. If I can do this without changing UCHAR[] to UCHAR[256] would be good. However, length is unknown. The line after replacement should read something close to:
//
CCharHandler szErrorLoadMessage2(ID_CompiledResource_20001,255,"unable to load ccures");
MessageBox(NULL,szErrorLoadMessage2.BufferLoadString,"",MB_OK);
UCHAR *szLibUCHAR[256];
//
BufferLoadString in the class is defined as:
//
char BufferLoadString[256];
//
Class works. Converting char array to uchar array is what I need help with.
|
|
|
|
|
you could write your own :
UCHAR* <font color=blue>operator</font> UCHAR* (<font color=blue>const char</font>*) {
<font color=green>
}
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
I need to be able to create a virtual, temporary disk partition entirely in memory but have it appear to an application as an ordinary disk partition. The idea is to allow the application to create and mainpulate files that vanish when the app exits.
Jim Scott
|
|
|
|
|
check into isoloated storage in the .net framework
|
|
|
|
|
Hi,
There is one solution to this problem..
There is a command called/program subst. you can execute this to create a virtual drive and then you can delete this drive.
Here I have given How I will do it using ms-dos.. (On Windows 2000)
run command or CMD from run.
c:\> subst s: d:\mydirectory
Now you can see s: drive in my computer which will have access to d:\mydirectory.. you can also remove this virtual drive..
Try is it possible to execute a dos command using your programming language. If you can, you can do it.
" Action without vision is only passing time,
Vision without action is merely day dreaming,
But vision with action can change the world "
- Words from Nelson Mandela
Thanks & Regards,
Gopalakrishnan
|
|
|
|
|
Hi all,
I don't see my exe file in debug or release.....no errors when I build or compile it using release or debug...And now when I run or execute my application using exe file...I don't see it there in release or debug
I don't know why....
Please help
Thanks in advance
Preeti9
|
|
|
|
|
Do you mean you don't see the file ? You've changed the path you build to.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
You may check the path!
学阿
|
|
|
|
|
Yes,
I can't see the file....but you know what, I am trying to execute a dll file, and we can't execute a DLL file....
Thanks
Preeti9
|
|
|
|
|
Hi Preeti9,
What do you mean? I couldn't understand.. You CANNOT execute a dll file?. I need more info pls..
" Action without vision is only passing time,
Vision without action is merely day dreaming,
But vision with action can change the world "
- Words from Nelson Mandela
Thanks & Regards,
Gopalakrishnan
|
|
|
|
|
Good afternoon, all
Has anyone seem this before?
error LNK2001: unresolved external symbol _WNetConnectionDialog@8
would it be some kind of the link that I am missing on the setting? or missing certain include file?
thanks!
|
|
|
|
|
I'm guessing that you've added a call to WNetConnectionDialog recently. The actual implementation of different parts of the Windows API are in different .dll files, and if you call one of the less used functions, you may have to instruct the linker to include the corresponding .lib file. In this case, you'll need to make sure you link with mpr.lib .
|
|
|
|
|