[Nel] NeL Network Engine
Nicolas Hognon
cblt@cblt.org
Wed, 28 Feb 2001 10:57:11 +0100
> In this case, we have to forget the solution where each
> socket is on a thread and use a blocked receive(). The problem is that
> select() is quite slow and if we have only 100 thread,
> each thread needs to manage, with a select(), around 50 players and we ll
> lost lot of time to create the array for the select()
> and check who have wakeup the select().
I encouter the same problem : one thread must manage more than one
socket on the server. the problem is how managing those socket
in the thread. the problem is I want to be portable between windows
and linux :((
under windows there is many solution :
- select (the only one which is portable)
- windows event and message
- overlapped I/O
under linux the only solution I know is :
- select / poll : i'm not sure but i think the difference between
select and poll is that with poll you don't have to fill your array
before each call.
another problem when a thread maange more than one socket is
what your threads will do :
a first approch is something like that :
while(run)
{
TestSokets();
for each socket which received something
do
read the incoming data
process the data
send data
done
}
but during one step of this loop your socket list must be locked
so if a new socket need to enter this thread the calling thread will be
blocked.
a solution is to have more than one thread type.
thread which test and read socket (perhaps wire in socket to)
thread which to process a network message queue.
(and perhaps thread which send network message)
but it increase the number of thread so the maximum
number of client is lesser.
but i'm not really used to programming with thread yet so perhaps
my problem are not really problems.
i hope this can help and you can understand me :))
and i think i'll take a look at http://oss.sgi.com/projects/state-threads/
to ...
good luck
--
Nicolas Hognon
nicolash@virtools.com
Virtools - The Behavior Company
Tel. (+33) 1 42 71 46 86 / Fax. (+33) 1 42 71 86 53
http://www.virtools.com/